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的更多相关文章
随机推荐
- C++反汇编第五讲,认识C++中的Try catch语法,以及在反汇编中还原
我们以前讲SEH异常处理的时候已经说过了,C++中的Try catch语法只不过是对SEH做了一个封装. 如果不懂SEH异常处理,请点击博客链接熟悉一下,当然如果不想知道,也可以直接往下看.因为异常处 ...
- Js setTimeout 用法
setTimeout( ) 是属于 window 的 method, 但我们都是略去 window 这顶层物件名称, 这是用来设定一个时间, 时间到了, 就会执行一个指定的 method. setTi ...
- SparkSQL读取HBase数据
这里的SparkSQL是指整合了Hive的spark-sql cli(关于SparkSQL和Hive的整合,见文章后面的参考阅读). 本质上就是通过Hive访问HBase表,具体就是通过hive-hb ...
- Javascript绑定事件的两种方式的区别
命名函数 <input type="button" onclick="check()" id="btn"/> <scrip ...
- 02_Hive安装简介
1.下载Hive安装包: 官网下载:http://hive.apache.org/downloads.html 百度云分享:https://pan.baidu.com/s/1M4LmdOXaq6T-P ...
- Linux 下升级Android Studio失败
在Linux下进行升级的时候,会弹出一个窗口,有一个表格,从表中发现在进行某些更新某些包是没有权限,解决方法很简单,将Android Studio安装文件夹改成当前Linux登陆用户即可. 1.找到A ...
- 移动端meta常用的设置
1.qq强制横屏或者竖屏显示 : <meta name="x5-orientation" content="portrait ||andscape&quo ...
- Python 实现快递查询
实现效果: 源代码: import urllib.request import json import msvcrt kd_dict = {1:'shentong',2:'youzhengguonei ...
- Collection 和 Collections 有什么区别?(未完成)
Collection 和 Collections 有什么区别?(未完成)
- [SHOI2013]阶乘字符串
题目描述 给定一个由前\(n\)个小写字母组成的串\(S\). 串\(S\)是阶乘字符串当且仅当前\(n\)个小写字母的全排列(共\(n!\)种)都作为\(S\)的子序列(可以不连续)出现. 由这个定 ...