Codeforces Round #761
阿新 • • 發佈:2021-12-17
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