Codeforces Round 866 (Div. 2) 题解

总结:4.20晚在宿舍V了一场,第二题卡住了,最后才交上,发现是没开long long,因为开始没有往那方面想嘛。。。。

A. Yura's New Name  

思路:定义一个f来表示是否遇到“^”,每遇到一个“_”判断前面是否有“^”,即f是否为1,若不为1则添加一个“^”,同时使f为0,注意需要特判最后一个为“_”或者只有一个“^”的情况!!!

#include
using namespace std;

int main(){
	int T,ans;
	string s;
	cin>>T;
	while(T--){
		int f=0;
		ans=0;
		cin>>s;
		for(int i=0;i

B. JoJo's Incredible Adventures

不开long long见祖宗,没想到这个题会爆int,被坑惨了,应该是存在2e5*2e5的问题。。。

思路:可以说是找规律吧。。。遍历两遍字符串s(因为s是成环的),计算最长的1字串的长度,同时还要考虑字符串全为1的情况,下面的计算面积就是找规律了,分就来讨论,具体规律就不说了,看代码即可

#include
#define int long long
using namespace std;

signed main(){
	int T,nmax,ant;
	string s;
	cin>>T;
	while(T--){
		nmax=0;ant=0;
		cin>>s;
		for(int i=0;i

C. Constructive Problem

思路:可以说是一道思维题吧,输入每个数并用map计数,先逐个遍历找出最小未出现的数记为t,再看是否存在t+1,因为要经过操作使最小未出现的数变为t+1,所以要将t+1全部变为t,即将第一个和最后一个t+1及之间的数全部变为t,若不存在t+1,只需要在小于t且个数大于2或者大于t的数中选一个变为t即可

#include
#include
#define int long long
using namespace std;

const int N=200005;
int a[N];
mapmp;
signed main(){
	int T,n,t;
	cin>>T;
	while(T--){
		bool f=0;
		mp.clear();
		cin>>n;
		for(int i=0;i>a[i];
			mp[a[i]]++;
		}
		for(int i=0;i<=N;i++){
			if(!mp[i]){
				t=i;
				break;
			}
		}
		if(mp[t+1]){
			for(int i=0;i=2){
					a[i]=t;
					mp[t]=1;
					break;
				}
				if(a[i]>t&&mp[a[i]]){
					a[i]=t;
					mp[t]=1;
					break;
				}
			} 
		}
		if(mp[t+1]){
			f=1;
		}
		for(int i=0;i<=t;i++){
			if(!mp[i]){
				f=1;
				break;
			}
		}
		if(f){
			cout<<"NO"<<'\n';
		}else{
			cout<<"YES"<<'\n';
		}
	}
	return 0;
}

你可能感兴趣的:(Codeforces,题解及总结,c++,开发语言,算法,蓝桥杯)