CF883H
CF883H
题意:
给你一个字符串,需要把它以最小的划分次数划分为x个长度相等的回文串,可以重新排列。
解法:
大模拟一个。
分别统计出现一次的字符和出现两次的字符,如果没有出现一次的字符,那么所有字符出现次数均为偶数,说明本身便可以排列成回文串。
如果某个字符出现次数为偶次,可以拆分为多个 $ \frac{cnt}{2} $ 个相同字符存入,如果出现次数为奇数次,则先存入单个统计并计数减1,再存入双个统计,如果单个字符数量不足,则需要用双个字符填充。
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 4e5 + 100;
char a[N],cnt[N * 2],s[N];
int Hash[300],n;
int main() {
scanf("%d",&n);
scanf("%s",s+1);
for(int i = 1 ; i <= n ; i++)
Hash[s[i]]++;
int L = 1, R = n;
for (int i = 1; i <= 200; i++)
if (Hash[i] & 1)
a[L++] = (char)i, Hash[i]--;
for (int i = 1; i <= 200; i++)
if (Hash[i]) {
while (Hash[i]--)
a[R--] = (char)i;
}
L--;
int ans, len;
for(ans = 1 ; ans <= n ; ans++) {
if(n % ans) continue;
len = n / ans;
if((n - L) / 2 >= ans * (len / 2)) break;
}
printf("%d\n",ans);
L = 1, R = n;
for(int i = 1 ; i <= ans; i++) {
int ll = N + 10, rr = N + 10;
if(len & 1) cnt[rr++] = a[L++];
for(int j = 1; j <= len/2; j++) {
cnt[--ll] = a[R--];
cnt[rr++] = a[R--];
}
for(int j = ll; j < rr; j++)
printf("%c",cnt[j]);
printf(" ");
}
// system("pause");
return 0;
}
CF883H的更多相关文章
随机推荐
- 高性能网站建设之 MS Sql Server数据库分区
什么是数据库分区?数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000中的表分割,它对访问用户是透明的, ...
- div可以同时设置背景图片和背景颜色吗?
前言 当然可以同时设置 当图片背景色不透明时 情况一:当图片的长.宽 >= div的长.宽时 我们最终看到div背景是图片,之所以说是最终看到,是因为在页面加载时,我们先看到的div背景是颜色, ...
- 使用 pdb 进行调试
使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变 ...
- seaborn:一个更强大的画图工具
数据加载: 1. Countplot 和之前的pandas绘图相比,使用countplot可以自动计算每类的数量. 2. KDE Plot KDE,是"kernel density esti ...
- 16.SpringMVC核心技术-文件上传
上传单个文件 1.定义具有文件上传功能的页面 index.jsp,其表单的设置需要注意,method 属性为 POST, enctype 属性为 multipart/form-data.另外,需要注意 ...
- miguowangluozhan
加紧备战 美国欲将全球拖入网络战争 人民日报 06-1405:01 去年,美国国防部发布的网络空间战略强调了“前沿防御(Defense forward)”理念.这被外界解读为美国军方将在他国而非美国本 ...
- redis——java访问redis
1,使用jedis的java客户端来访问redis服务器,有点类似于通过jdbc访问mysql一样: 2,如果是spring集成时,可以使用spring data 来访问redis,spring da ...
- 说一下 HashMap 的实现原理?(未完成)
说一下 HashMap 的实现原理?(未完成)
- lnmp配置
yum源切换 下载wegt工具 yum install -y wget 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...
- list去重的四种方式
L=[1,2,3,3,5,5,5,8,4,6,9,7,2,'a','s','a','e','s','z'] def DelDupli(L): L1=[] for i in L: ...