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 / 贪心的主要内容,如果未能解决你的问题,请参考以下文章

B. AccurateLee难度: 1200 / 贪心

Codeforces Round #652 (Div. 2) B. AccurateLee(字符串)

B. Worms1200 / 二分

B. Young Explorers1200 / 贪心

B. Young Explorers1200 / 贪心

B. Young Explorers1200 / 贪心