思路:

a素数->b合数

c素数->b合数

a,c属于一类

so,预处理相同的,并且计数。1000怎么搞都无压力;

我这里也预处理了字母个数,从集合大的枚举下来,每次拿字母个数最多的去匹配。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=1e3+10; bool isprime(int x)
{
if(x==1) return false;
int q=sqrt(x);
for(int i=2; i<=q; i++)
if(x%i==0) return false;
return true;
} pair<int,int>sum[1010];
int ssum[30]; char s[N],ans[N];
bool vis[N];
int n;
vector<int>prime;
vector<int>num[200]; void init()
{
for(int i=1; i<=1000; i++)
if(isprime(i)) prime.push_back(i);
} int pre[N];
int Find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];
int i=x,j;
while(pre[i]!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
} pair<int,int>xs[1010];
vector<int>pp[1010]; int main()
{
//预处理素数
init(); scanf("%s",s+1);
n=strlen(s+1); //求和
for(int i=1; i<=n; i++)
{
int x=s[i]-'a';
ssum[x]++;
}
for(int i=0; i<26; i++)
{
sum[i].first=ssum[i];
sum[i].second=i;
} //分块。
int sz=prime.size();
int ssz=sz;
for(int i=0; i<sz; i++)
{
if(prime[i]>n)
{
ssz=i;
break;
}
for(int k=1; k<=n; k++)
{
if(k*prime[i]>n) break;
num[i].push_back(k*prime[i]);
}
}
for(int i=1; i<=n; i++)
pre[i]=i;
for(int i=0; i<ssz; i++)
{
int u=prime[i];
int sss=num[i].size();
for(int k=0; k<sss; k++)
{
int v=num[i][k];
int uu=Find(u);
int vv=Find(v);
if(uu!=vv)
pre[uu]=vv;
}
}
//建立 集合个数 和 集合元素
for(int i=1;i<=n;i++)
xs[i].first=0;
for(int i=1; i<=n; i++)
{
int x=Find(i);
xs[x].first++;
xs[x].second=x;
pp[x].push_back(i);
} //从大到小
sort(xs+1,xs+n+1);
sort(sum,sum+26);
// for(int i=n;i>=1;i--)
// {
// printf("%d %d\n",xs[i].first,xs[i].second);
// }
// for(int j=25;j>=23;j--)
// {
// printf("%d\n",sum[j].first);
// }
for(int i=n; i>=1; i--)
{
int sz=xs[i].first; //集合个数
int x=xs[i].second; //集合老大
if(pp[x].size()==0) break;
bool flag=false;
int j=25;
if(sum[j].first>=sz)
{
for(int k=0; k<sz; k++)
ans[pp[x][k]-1]=sum[j].second+'a';
sum[j].first-=sz;
}
else
flag=true;
sort(sum,sum+26);
if(flag)
{
puts("NO");
return 0;
}
}
ans[n]='\0';
puts("YES");
printf("%s\n",ans);
return 0;
}

CodeForces 124C【连通块】的更多相关文章

  1. Codeforces Round #375 (Div. 2)——D. Lakes in Berland(DFS连通块)

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块

    C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】

    一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...

  4. CodeForces 690D1 The Wall (easy) (判断连通块的数量)

    题意:给定一个图,问你有几个连通块. 析:不用说了,最简单的DFS. 代码如下: #include <bits/stdc++.h> using namespace std; const i ...

  5. Codeforces 920E Connected Components? 补图连通块个数

    题目链接 题意 对给定的一张图,求其补图的联通块个数及大小. 思路 参考 ww140142. 维护一个链表,里面存放未归入到任何一个连通块中的点,即有必要从其开始进行拓展的点. 对于每个这样的点,从它 ...

  6. Codeforces 990 调和级数路灯贪心暴力 DFS生成树两子树差调水 GCD树连通块暴力

    A 水题 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) using namespace ...

  7. Codeforces 987 K预处理BFS 3n,7n+1随机结论题/不动点逆序对 X&Y=0连边DFS求连通块数目

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  8. DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)

    题目链接 #1381 : Little Y's Tree 时间限制:24000ms 单点时限:4000ms 内存限制:512MB 描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每 ...

  9. UVA 572 油田连通块-并查集解决

    题意:8个方向如果能够连成一块就算是一个连通块,求一共有几个连通块. 分析:网上的题解一般都是dfs,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了... # ...

  10. HD1269迷宫城堡(有向图 && 划分连通块)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. 解决微信浏览器video全屏的问题

    解决微信浏览器video全屏的问题 在微信浏览器里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素. <video id="videoID ...

  2. 分享知识-快乐自己:解决 Maven 无法下载 fastdfs-client-java 依赖。

    因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在maven中央仓库是没有的. 需要自己编译源码成jar本地安装到maven 的本地仓库,安装完以后就能正常引用 ...

  3. TCP/IP 详解卷一 - TCP CWR、ECE、URG、ACK、PSH、RST、SYN、FIN控制位

    from:https://blog.csdn.net/u012243115/article/details/43487461 2015年02月04日 15:56:32 阅读数:1464 TCP 和 U ...

  4. Python中如何开发一个注册接口小实例

    import flask from flask import request #想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) #吧这个python文件 ...

  5. POJ3621Sightseeing Cows

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10595   Accepted: 3632 ...

  6. iOS重写drawRect方法实现带箭头的View

    创建一个UIView的子类,重写drawRect方法可以实现不规则形状的View,这里提供一个带箭头View的实现代码: ArrowView.h #import <UIKit/UIKit.h&g ...

  7. 白话算法(6) 散列表(Hash Table) 从理论到实用(下)

    [澈丹,我想要个钻戒.][小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱.] ——自扯自蛋 无论开发一个程序还是谈一场恋爱,都差不多要经历这么4个阶段: 1)从零开始.没有束缚的轻松感.似 ...

  8. 卸载DCOS

    再次安装,已经是隔了两天,我打算换一台机器作为boot机器,但是发现报错,告知部署设备已经安装了dcos:看来需要卸载:uninstall-master.sh /opt/mesosphere/bin/ ...

  9. vmware的双网卡以及Pro的注册码

    DC/OS的master需要能够上外网而且能够和本地内网设备交互,于是打算在虚拟机上面做测试,于是调研了一下虚拟机的双网卡配置.   最推荐的方式是使用vmware的station,而不是player ...

  10. bzoj 3730 震波 —— 动态点分治+树状数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3730 建点分树,每个点记两个树状数组,存它作为重心管辖的范围内,所有点到它的距离情况和到它在 ...