思路:
构造+贪心模拟。
实现:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n; 5 string s,t; 6 while(cin>>n>>s>>t){ 7 int p=0,q=0; 8 for(int i=0;i<n;i++){ 9 if(s[i]=='0')p++; 10 if(t[i]=='0')q++; 11 } 12 if(p!=q){cout<<-1<<endl;continue;} 13 string a=""; 14 for(int i=0;i<n;i++){ 15 if(s[i]==t[i])continue; 16 a+=s[i]; 17 } 18 int res=0; 19 set<int>st0,st1; 20 for(int i=0;i<a.length();i++){ 21 if(a[i]=='0'){ 22 if(!st1.empty()){ 23 int tmp=*st1.begin(); 24 st1.erase(*st1.begin()); 25 st0.insert(tmp); 26 } 27 else{ 28 st0.insert(i); 29 } 30 } 31 else{ 32 if(!st0.empty()){ 33 int tmp=*st0.begin(); 34 st0.erase(*st0.begin()); 35 st1.insert(tmp); 36 } 37 else{ 38 st1.insert(i); 39 } 40 } 41 } 42 cout<<st0.size()+st1.size()<<endl; 43 } 44 return 0; 45 }