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的更多相关文章
随机推荐
- Lambda表达式使用方法整理
匿名内部类 Lambda表达式 匿名内部类 ...
- Spring web.xml详解
web.xml文件是Java Web项目中的一个配置文件,主要用于配置欢迎页.Filter.Listener.Servlet等,但并不是必须的,一个Java Web项目没有web.xml文件也是照样能 ...
- Spring Cloud(六)服务网关 zuul 快速入门
服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...
- 【python】导入自定义模块
一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...
- TP5 用cron实现linux定时任务
TP5 用cron实现linux定时任务 1) tp5的控制器内容: namespace app\test\controller; use think\Controller; use think\fa ...
- 【atcoder】GP 2 [agc036C]
题目传送门:https://atcoder.jp/contests/agc036/tasks/agc036_c 题目大意:给你一个长度为$N$初始全0的序列,每次操作你可以找两个不同的元素,一个自增1 ...
- 报错处理(UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 2: ill egal multibyte sequence)
参照文[https://blog.csdn.net/Dillon2015/article/details/53204955]的说法, 第一个错 [UnicodeEncodeError:'gbk' co ...
- 如何入门Pytorch之二:如何搭建实用神经网络
上一节中,我们介绍了Pytorch的基本知识,如数据格式,梯度,损失等内容. 在本节中,我们将介绍如何使用Pytorch来搭建一个经典的分类神经网络. 搭建一个神经网络并训练,大致有这么四个部分: 1 ...
- (十二)A64
一.AC108驱动移植 1.驱动添加 cp r18/lichee/linux-4.4/sound/soc/codecs/ac108.* a64/linux-3.10/sound/soc/codecs/ ...
- java——maven依赖版本冲突
博客:maven依赖jar包时版本冲突的解决