求此代码正确性
查看原帖
求此代码正确性
597004
IRIDESCENTqwq楼主2024/12/1 08:25

过了大样例,rt

#include <bits/stdc++.h>
using namespace std;
const int NR = 1e5 + 5;
int n;
int s[2][NR];
bool flag[2][NR];
int cnt[2][NR][2], cur[2], id[2][NR];
void test(){
    cin >> n;
    for (int i = 0; i <= 1; i++){
        for (int j = 1; j <= n; j++){
            char ch; cin >> ch;
            s[i][j] = ch - '0';
        }
    }
    cur[0] = 0;
    cur[1] = 0;
    for (int i = 0; i <= 1; i++){
        for (int j = 1; j <= n; j++){
            char ch; cin >> ch;
            flag[i][j] = (bool)(ch - '0');
            if (flag[i][j] == 1){
                int rt;
                if (j == 1 || flag[i][j - 1] == 0){
                    rt = ++cur[i];
                    cnt[i][rt][0] = 0;
                    cnt[i][rt][1] = 0;
                }
                else{
                    rt = cur[i];
                }
                cnt[i][rt][s[i][j]]++;
                id[i][j] = rt;
            }
            else{
                id[i][j] = 0;
            }
        }
    }
    int ans = 0;
    for (int i = 0; i <= 1; i++){
        for (int j = 1; j <= n; j++){
            if (flag[i][j] == 1 && flag[i ^ 1][j] == 0){
                int k = id[i][j], to = s[i ^ 1][j];
                if (cnt[i][k][to] > 0){
                    cnt[i][k][to]--;
                    ans++;
                }
            }
        }
    }
    for (int i = 1; i <= n; i++){
        if (flag[0][i] == 1 && flag[1][i] == 1){
            int p = id[0][i], q = id[1][i];
            if (cnt[0][p][0] > 0 && cnt[1][q][0] > 0){
                ans++;
                cnt[0][p][0]--;
                cnt[1][q][0]--;
            }
            else if (cnt[0][p][1] > 0 && cnt[1][q][1] > 0){
                ans++;
                cnt[0][p][1]--;
                cnt[1][q][1]--;
            }
        }
    }
    for (int i = 1; i <= n; i++){
        if (flag[0][i] == 0 && flag[1][i] == 0){
            if (s[0][i] == s[1][i]){
                ans++;
            }
        }
    }
    cout << ans << endl;
}
int main(){
    //freopen("edit.in", "r", stdin);
    //freopen("edit.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int T;
    cin >> T;
    while (T--){
        test();
    }
    return 0;
}

2024/12/1 08:25
加载中...