CodeForces 123A 并查集
2014-10-08 21:09
288 查看
写了好长时间的代码,思路一看就有了,然后写了下,发现自己这方面的题目写的真是不好。。。擦。
题意:给一个字符串,然后对于这个字符串来说,他的素数位置 * i (1=<i <= len)要等于他本身,从新构造这个字符串,判断是否有一种情况满足这个条件。。
题意:给一个字符串,然后对于这个字符串来说,他的素数位置 * i (1=<i <= len)要等于他本身,从新构造这个字符串,判断是否有一种情况满足这个条件。。
/* 这个代码自己写的真挫,有思路但是写不出来。。。。。*/ #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<queue> using namespace std; int father[10001]; int find(int x){ if(x == father[x])return x; else return father[x] = find(father[x]); } int main() { char a[1009],b[1009]; cin >> (a+1); int len = strlen(a+1); int vis[1008]; for(int i=1;i<=len;i++)father[i] = i; for(int i=2;i<=len;i++){ for(int j=i;j<=len;j+=i){ if(vis[j]){ int x = find(j); father[i] = x; } else { father[j] =i;vis[j] = 1; } } } int numa[1008]; memset(numa,0,sizeof(numa)); for(int i=1;i<=len;i++) numa[a[i]-'a']++; int num[1008]; memset(num,0,sizeof(num)); int cn = 0; int k[1008]; for(int i=1;i<=len;i++) { for(int j=1;j<=len;j++) { if(father[j] == i)num[i]++; } if(num[i])k[cn++] = i; } int flag = 1; for(int i=0;i<cn;i++){ int t=k[i],Max = 10000000,pos =-1; for(int j=0;j<=25;j++){ if(!numa[j])continue; if(numa[j] - num[k[i]] < Max &&numa[j] >=num[k[i]]){ Max = numa[j] - num[k[i]]; t = k[i]; pos = j; } } if(pos == -1){flag = 0;break;} for(int h=1;h<=len;h++){ if(father[h] == t){ b[h] = pos+'a'; numa[pos] --; } } num[t] = 0; } b[len+1] = '\0'; int cnt = 0; if(flag == 0)puts("NO"); else{ puts("YES"); for(int i=1;i<=len;i++) { if(b[i] <'a'){ for(int j=0;j<=25;j++) if(numa[j]>0) { printf("%c",j+'a'); numa[j]--; } } else printf("%c",b[i]); } puts(""); } }
相关文章推荐
- Codeforces 452E Three strings 后缀数组 + 并查集
- Codeforces-766D-The Door Problem(2-SAT-并查集解)
- CodeForces 437D -- The Child and Zoo(并查集+贪心)
- 并查集 codeforces party
- Codeforces 228E The Road to Berland is Paved With Good Intentions 枚举dfs判断可行性 || 并查集
- Codeforces 25D-Roads not only in Berland 并查集
- Codeforces 500B:New Year Permutation(并查集||Floyd+思维)
- CodeForces 151D Quantity of Strings(并查集)
- CodeForces - 371D Vessels——并查集
- codeforces 722C 并查集好题+逆序处理
- CODEFORCES 468B Two Sets ---并查集建树
- codeforces 123A/124C Prime Permutation
- CodeForces - 505B Mr. Kitayuta's Colorful Graph —— 多维并查集
- CodeForces - 698B Fix a Tree(并查集)
- codeforces 731C 并查集
- codeforces 691D Swaps in Permutation(并查集)
- Codeforces 505B - Mr. Kitayuta's Colorful Graph DFS或并查集
- (one day one problem) codeforces 468/problem/B Two Sets (并查集)
- CodeForces 616C The Labyrinth (二维并查集)
- Codeforces 400D Dima and Bacteria(并查集最短路)