题目链接:点击查看

题目大意:给出一个字符串s,问能否通过重组其字母顺序,从而满足:若字符串下标从1开始,对于每一个质数下标,满足

题目分析:其实在纸上稍微写写画画就能看出个大概的规律,当字符串的长度比较大的时候,对于每个质数的倍数,都会包含2、3等比较小的倍数,所以当前质数及其倍数下标的字母一定和2、3质数及其倍数下标的字母相同,我们可以归为一个集合中去,也就是说这个集合中的下标的字母都是相同的才行,有一些特例就是有一些质数下标比较大,大于了len/2,所以它就处于了一个单独的集合中,换句话说,这个大质数下标对应的字母是随便一个就行,所以我们用并查集乱搞,那个最大的集合筛选出来就行了,对应着原字符串s中出现次数最多的字母,其他的位置随便放就好了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int num[30],f[N],mark[N],cnt[N];char ans[N];bool is_pri(int x)
{if(x<2)return false;for(int i=2;i*i<=x;i++)if(x%i==0)return false;return true;
}int find(int x)
{return x==f[x]?x:f[x]=find(f[x]);
}void merge(int x,int y)//x->y
{int xx=find(x);int yy=find(y);if(xx!=yy){f[xx]=yy;cnt[yy]+=cnt[xx];}
}void init()
{for(int i=1;i<N;i++)f[i]=i;memset(mark,-1,sizeof(mark));
} int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);init();string s;cin>>s;int n=s.size();for(int i=0;i<n;i++)num[s[i]-'a']++;int mmax=*max_element(num,num+26);//原字符串中最大有mmax个相同的字母for(int i=1;i<=n;i++){if(!is_pri(i))//当前数字不是素数,直接跳过continue;for(int j=1;j*i<=n;j++){if(mark[j*i]!=-1)//当前数字被标记过,则将当前素数与之前素数合并merge(mark[j*i],i);else//当前数字没被标记过,将当前数字与当前素数合并,并且将标记指向为当前素数{merge(j*i,i);mark[j*i]=i;cnt[i]++;}}}int mx=*max_element(cnt,cnt+N);//新字符串需要mx个相同的字母if(mx>mmax)puts("NO");else{int ch;//哪个字母可以填在相同位置 for(int i=0;i<26;i++){if(mx<=num[i]){ch=i;num[i]-=mx;break;}}int pos=find(2);//哪个位置需要填字母ch puts("YES");for(int i=1;i<=n;i++){if(find(i)==pos)ans[i]='a'+ch;else{for(int j=0;j<26;j++){if(num[j]){num[j]--;ans[i]='a'+j;break;}}}}puts(ans+1);}return 0;
}

CodeForces - 123A prime permutation(并查集,水题)相关推荐

  1. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  2. 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题

    18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...

  3. 战争来临(并查集模板题)

    战争来临(并查集模板题) 描述   那一个骑单车卖报纸的少年 恐慌的眼泪慢慢布满了侧脸----<战争世界>   B国对A国发动了侵略战争,A国不得不全力抵御.A国幅员辽阔,后方群众的支援补 ...

  4. 并查集模板题(stl 中map的运用)

    DongDong认亲戚 DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的 ...

  5. HDU 1213 How Many Tables 并查集 水~

    http://acm.hdu.edu.cn/showproblem.php?pid=1213 果然是需要我陪跑T T,禽兽工作人员还不让,哼,但还是陪跑了~ 啊,还有呀,明天校运会终于不用去了~耶耶耶 ...

  6. Codeforces 371D. Vessels【并查集】

    题目大意: 给出一堆从上到下叠起来的容器,有两种操作:第一种是在编号为i的容器中加入x的水(保证水溢出之后会流到下一个最近的容器(如果存在)中):第二种是查询编号为i的容器中有多少水. 做法: 首先, ...

  7. CodeForces - 371D Vessels 【并查集】

    Vessels 题意: 自上而下的n个碗,向某个碗中倒水,如果溢出,则会流向它之下的下一个未满的碗.有两种操作:1 p x表示往第p个碗中导入x的水,2 p表示询问此时第p个碗中的水量. 题解: 未经 ...

  8. CodeForces - 468B Two Sets(并查集+思维)

    题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...

  9. Harmonious Graph CodeForces - 1253D(思维+并查集)

    You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...

最新文章

  1. 17 个品牌,113 款 5G 手机,5G 离我们越来越近
  2. 转.我在MySQL的那些年
  3. Linux云服务器卸载安装MySql
  4. cus.crm.notes.Component.extend(cus.crm.notes.ext.Component, {
  5. SAP CRM呼叫中心异步搜索功能的实现
  6. Mac使用技巧:在“快速查看”中查看和编辑文件
  7. PHP文件上传实现的注意点
  8. 计算机应用基础第一章ppt,计算机应用基础第一章课件.ppt
  9. Struts1框架轻易入门,经典示例
  10. On Robust Capon Beamforming and Diagonal Loading
  11. 这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖
  12. Arcgis选择自己想要的区域地图
  13. 加密数据库与密文检索、同态加密
  14. git 删除远程仓库中的文件(夹)
  15. CoreDNS篇1-简介和安装
  16. 景安服务器怎么重装系统,怎么全盘重装系统|全盘重装系统步骤
  17. CC00012.druid——|HadoopOLAP_Druid.V12|——|Druid.v12|实战|Druid实战案例.V1|
  18. google 天气预报API
  19. 使用scrapy爬虫,爬取17k小说网的案例-方法二
  20. 高电平低电平是什么意思

热门文章

  1. Spring注入的基本使用
  2. MyBatis 插件原理与自定义插件-代理和拦截是怎么实现的?
  3. 完成AOP 顶层设计-JoinPoint
  4. RocketMQ各角色介绍
  5. 选择结构_扩展if-else语句
  6. 通过RocketMQ的java客户端api进行测试
  7. Oracle之同义词,DBLINK,表空间
  8. 联发科mtk手机处理器怎么样_5G手机价格将再探新低!联发科天玑700芯片发布:入门级5G处理器...
  9. 200813_C指针
  10. android天气查询(一)websevice之ksoap2软件包的使用