B. AccurateLee难度: 1200 / 贪心
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. AccurateLee难度: 1200 / 贪心相关的知识,希望对你有一定的参考价值。
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;
以上是关于B. AccurateLee难度: 1200 / 贪心的主要内容,如果未能解决你的问题,请参考以下文章