codeforces 955B Not simply beatiful strings

题目链接:http://codeforces.com/contest/955/problem/B

题意:给你一个字符串,问能否把字符串分成两份,使得每一份都可以分成由两组,这两组中的每一组都是一个字符的重复,且这两组重复字符不相同。可以输出Yes,否则输出No。

分析:这题写的比较乱,总之如果整个字符串只由一个字符构成或者字符串长度小于4,必然不可以,输出No。如果由两种字符构成,那么只要每种字符个数都大于等于2即可输出Yes。由三种或者四种字符构成长度大于等于4的字符串必然是可以的。字符个数大于4必然是不行的,无法满足单个字符重复这个条件。

AC代码:

 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 }
View Code
原文地址:https://www.cnblogs.com/ls961006/p/8660780.html