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; }
百题计划-6 codeforces 651 div2 E. Binary Subsequence Rotation 01序列集合划分,2个队列处理
原文:https://www.cnblogs.com/fool-ke/p/13543668.html