1. 程式人生 > 其它 >Codeforces Round #761

Codeforces Round #761

A

思路

如果是t是a開頭就置換b,c位置,如果a個數為0,“abc”則不用換,其他按abc順序加入re即可

		string s,t,re;
		vector<int> a(26,0);
		cin>>s>>t;
		for(auto x:s) a[x-'a']++;
		if(t=="abc"||t=="acb")
		{
			
			if(t[1]=='b'&&a[0]!=0){
				while(a[0]--) re+='a';
				while(a[2]--) re+='c';
				while(a[1]--) re+='b';
			}
			else{
				while(a[0]--) re+='a';
				while(a[1]--) re+='b';
				while(a[2]--) re+='c';
			}
		}
		else 
		{
			while(a[0]--) re+='a';
			while(a[1]--) re+='b';
			while(a[2]--) re+='c';
		}
		for(int i = 3;i<26;i++)
		while(a[i]--) re+=('a'+i);
	
		cout<<re<<'\n';

B

思路

令 c = 1,a從2開始爆搜,必在O(n/2)的時間複雜度解決

		cin>>n;
		k = 1;
		int l = n -1;
		for(int i = 2;i<n;i++)
		if(__gcd(i,n-1-i)==1)
		{
			t = i,m = n-1-i;
			break;
		}
		cout<<t<<' '<<m<<" 1\n";

C

思路

原有的先填坑,對不符合要求的拉出來派個序,按順序判下未填的是否c[i]>2*i,否的話就不能幹break掉

		cin>>n;
		rep(i,1,n) b[i] = 0; k = 0; m = 0;
		rep(i,1,n) {
			cin>>a[i];
			if(a[i]<=n) {
			    if(!b[a[i]])
			    b[a[i]]++;
			    else c[k++] = a[i];
			}
			else c[k++] = a[i];
		}
		
		sort(c,c+k);
		int ok = 0,cnt = 0;;
		rep(i,1,n){
			if(!b[i])
			{
				if(c[m++]>2*i) cnt++;
				else 
				{
					ok = 1;
					break;
				}
			}
		}
		if(ok) cout<<"-1\n";
		else cout<<cnt<<endl;
	}

D1(待續)

本文來自部落格園,作者:InsiApple,轉載請註明原文連結:https://www.cnblogs.com/InsiApple/p/15701942.html