Gym 102392D Cycle String? ###K ###K //K
题目链接:https://codeforces.ml/gym/102392/problem/D
题意:给定一个长度为2*n的字符串 问能否重新排列构造出 所有长度为n的子串不能有重复 的字符串, 字符串为环状
思路:每个最大的字符没有大于n的话 那么只需要a~z 顺序输出即可, 否则的话 讨论,找下规律可以发现 只有当max1==n*2-2的时候 剩下的2个字符不一样才可以构造 当max1>=n*2-1 的时候无解
把a放n个 第n+1个放b 然后继续顺序放即可 属于造几个例子模拟下就能出的题
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int maxn =1e5+10; 6 const int mod=1e9+7; 7 int f[26]; 8 9 10 int main() 11 { 12 ios::sync_with_stdio(false); 13 cin.tie(0); 14 string s; 15 cin>>s; 16 int n=s.size(); 17 n/=2; 18 int max1=0; 19 for(auto &v:s) 20 { 21 int x=v-'a'; 22 f[x]++; 23 max1=max(max1,f[x]); 24 } 25 if(max1<=n) 26 { 27 cout<<"YES"<<'\n'; 28 for(int i=0;i<26;i++) 29 { 30 for(int j=0;j<f[i];j++) 31 { 32 cout<<char('a'+i); 33 } 34 } 35 } 36 else if(max1==n*2-1||max1==n*2) 37 { 38 cout<<"NO"<<'\n'; 39 } 40 else if(max1==n*2-2) 41 { 42 int flag=0; 43 for(int i=0;i<26;i++) 44 { 45 if(f[i]==2) 46 flag=1; 47 } 48 if(flag) 49 { 50 cout<<"NO"<<'\n'; 51 } 52 else 53 { 54 cout<<"YES"<<'\n'; 55 int index=-1; 56 for(int i=0;i<26;i++) 57 { 58 if(f[i]>n) 59 index=i; 60 } 61 for(int i=0;i<n;i++) 62 cout<<char('a'+index); 63 f[index]-=n; 64 for(int i=0;i<26;i++) 65 { 66 if(i!=index&&f[i]) 67 { 68 f[i]--; 69 cout<<char('a'+i); 70 break; 71 } 72 } 73 for(int i=0;i<f[index];i++) 74 cout<<char('a'+index); 75 f[index]=0; 76 for(int i=0;i<26;i++) 77 { 78 for(int j=0;j<f[i];j++) 79 cout<<char('a'+i); 80 } 81 } 82 83 } 84 else 85 { 86 cout<<"YES"<<'\n'; 87 int index=-1; 88 for(int i=0;i<26;i++) 89 { 90 if(f[i]>n) 91 index=i; 92 } 93 for(int i=0;i<n;i++) 94 cout<<char('a'+index); 95 f[index]-=n; 96 for(int i=0;i<26;i++) 97 { 98 if(i!=index&&f[i]) 99 { 100 f[i]--; 101 cout<<char('a'+i); 102 break; 103 } 104 } 105 for(int i=0;i<f[index];i++) 106 cout<<char('a'+index); 107 f[index]=0; 108 for(int i=0;i<26;i++) 109 { 110 for(int j=0;j<f[i];j++) 111 cout<<char('a'+i); 112 } 113 114 } 115 116 117 118 119 120 121 122 123 }
                    
                
                
            
        
浙公网安备 33010602011771号