题目链接:http://codeforces.com/contest/955/problem/B
题意:给你一个字符串,问能否把字符串分成两份,使得每一份都可以分成由两组,这两组中的每一组都是一个字符的重复,且这两组重复字符不相同。可以输出Yes,否则输出No。
分析:这题写的比较乱,总之如果整个字符串只由一个字符构成或者字符串长度小于4,必然不可以,输出No。如果由两种字符构成,那么只要每种字符个数都大于等于2即可输出Yes。由三种或者四种字符构成长度大于等于4的字符串必然是可以的。字符个数大于4必然是不行的,无法满足单个字符重复这个条件。
AC代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 map<char,int>mp; 6 int main(){ 7 ios_base::sync_with_stdio(0); 8 cin.tie(0); 9 string s; 10 while(cin>>s){ 11 int d=s.size(); 12 int ans=0; 13 mp.clear(); 14 for(int i=0;i<d;i++){ 15 if(mp[s[i]]==0){ 16 ans++; 17 } 18 mp[s[i]]++; 19 } 20 if(d<=3||ans==1){ 21 cout<<"No"<<endl; 22 } 23 else if(ans==2){ 24 int p=0; 25 for(int i=0;i<d;i++){ 26 if(mp[s[i]]<2){ 27 p=1; 28 break; 29 } 30 } 31 if(p==0) cout<<"Yes"<<endl; 32 else cout<<"No"<<endl; 33 } 34 else if(ans>4){ 35 cout<<"No"<<endl; 36 } 37 else cout<<"Yes"<<endl; 38 } 39 return 0; 40 }