1. 程式人生 > 實用技巧 >百題計劃-6 codeforces 651 div2 E. Binary Subsequence Rotation 01序列集合劃分,2個佇列處理

百題計劃-6 codeforces 651 div2 E. Binary Subsequence Rotation 01序列集合劃分,2個佇列處理

https://codeforces.com/contest/1370/problem/E

佇列元素以末尾字元為結尾的序列就好了,這裡佇列裡的元素不重要,佇列size重要

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=(1LL<<30);

int n;
string s,t;

bool check(string& s,string& t){
    int c1s=0,c1t=0;
    for(int i=0;i<n;i++) c1s+=s[i]=='
1',c1t+=t[i]=='1'; return c1s==c1t; } int main(){ while(cin>>n>>s>>t){ if(!check(s,t)){ puts("-1");continue; } int q[2][2]; memset(q,0,sizeof(q)); int res=0; for(int i=0;i<n;i++){ if(s[i]==t[i]) continue
; int c=s[i]-'0'; int tag=0; if(q[c^1][c^1]>0) q[c^1][c^1]--,tag=1; else if(q[c][c^1]>0) q[c][c^1]--,tag=2; if(tag==0) q[c][c]++; else if(tag==1) q[c^1][c]++; else q[c][c]++; } cout<<q[0][1]+q[1
][0]<<endl; } return 0; }
View Code