https://codeforces.com/problemset/problem/1369/B
贪心,先将一段的0/1进行压缩,你会发现.
通过这个例子你就会发现: 1100110 -> 0
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
string s; cin>>s;
vector<pair<char,int>>ve;
for(int i=0;i<s.size();i++)
{
int j=i;
while(j+1<s.size()&&s[i]==s[j+1]) j++;
ve.push_back({s[i],j-i+1});//保存一段一段的
i=j;
}
string ans;
for(int i=0;i<ve.size();i++)
{
int j=i;
bool flag=false;
while(j<ve.size())
{
if(j+1>=ve.size()) break;
char a=ve[j].first,b=ve[j+1].first;
if(a=='1'&&b=='0') j=j+2,flag=true;//1010.....
else break;
}
if(flag) ans+="0",i=j-1;//只留一个0
else
{
for(int z=0;z<ve[i].second;z++) ans+=ve[i].first;
}
}
cout<<ans<<endl;
}
return 0;
}