本文最后更新于40 天前,其中的信息可能已经过时,如有错误请发送邮件到marcelozoeng@qq.com
AcWing 5855. 相对成功与相对失败
#include <iostream>
#include <cstring>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
const int N = 10e5 + 10;
int f[N][3], arr[N];
void solve(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
int a, b;
cin >> a >> b;
arr[i] = a + (!b);
}
for(int i = 1; i <= n; i++){
int tp;
cin >> tp;
if(arr[tp] == 0){
f[i][2] = f[i - 1][2];
f[i][1] = f[i - 1][1];
f[i][0] = max(f[i - 1][2], max(f[i - 1][1], f[i - 1][0])) + 1;
}
else if(arr[tp] == 1){
f[i][2] = f[i - 1][2];
f[i][1] = max(f[i - 1][1], f[i - 1][2]) + 1;
f[i][0] = f[i - 1][0];
}
else if(arr[tp] == 2){
f[i][2] = f[i - 1][2] + 1;
f[i][1] = f[i - 1][1];
f[i][0] = f[i - 1][0];
}
}
cout << n - max(f[n][2], max(f[n][1], f[n][0])) << endl;
}
int main(){
IOS;
int T;
cin >> T;
while (T--)
solve();
return 0;
}