883H - Palindromic Cut(思维+STL)
题目链接:http://codeforces.com/problemset/problem/883/H
题目大意:给一段长度为n的字符串s,想让你把s切成几段长度相同的回文串,可以改变s中字符的排列,最少可以出现切成几段。
解题思路:看了大佬写的,自己思维还是有诸多不足,也学到了vector可以用pop_back()删除最后一个元素,还学到了处理字符数量的技巧。首先,每段回文串里肯定都有一个字符是单个的,假设每段回文串都没有字符是单个的,那说明可以合成一串,假设不成立。假设有的回文串中有字符是单个的,有的没有,那长度肯定是一奇一偶不符合题目每段长度都相同的要求,假设不成立。
用vector<char>shuang,vector<char>dan分别统计出现两次和出现一次的字符。
所以可以分为以下几步:
①计算每个字符出现次数,并判奇偶,如果是偶数个就拆分成多个数量为2的字符存入(比如‘c’出现4次,那就存入两次c)shuang。如果是奇数个,就先拿一个存入dan,再把剩下的拆分成多个数量为2的字符存入shuang。
②如果没有出现数量为奇数的字符,那就最少可以只有一个回文串,直接将s输出。
③出现数量为奇数的字符,如果shuang内的字符不能平分给dan内的字符,也就是不能形成长度相同的回文串,那就把双里的字符拆成两次放入dan中,使得shuang能被dan平分。然后直接输出所有回文串即可。
代码:
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
using namespace std;
const int N=4e5+; int cnt[];
char ans[N],s[N];
vector<char>dan;
vector<char>shuang; int main(){
int n;
scanf("%d",&n);
scanf("%s",s);
for(int i=;i<n;i++){
cnt[s[i]]++;
}
for(int i=;i<=;i++){
if(cnt[i]){
if(cnt[i]%){
cnt[i]--;
dan.push_back(i);
}
while(cnt[i]){
cnt[i]-=;
shuang.push_back(i);
}
}
}
if(dan.size()==){
for(int i=;i<n/;i++){
ans[i]=ans[n-i-]=shuang.back();
shuang.pop_back();
}
ans[n]='\0';
printf("1\n%s\n",ans);
}
else{
//用偶数单词凑成每段长度相同
while(shuang.size()%dan.size()){
dan.push_back(shuang.back());
dan.push_back(shuang.back());
shuang.pop_back();
}
int len=n/dan.size();
printf("%d\n",dan.size());
for(int i=;i<dan.size();i++){
ans[len/]=dan[i];
for(int j=;j<len/;j++){
ans[j]=ans[len-j-]=shuang.back();
shuang.pop_back();
}
ans[len]='\0';
printf("%s ",ans);
}
}
return ;
}
883H - Palindromic Cut(思维+STL)的更多相关文章
- codeforces 883H - Palindromic Cut - [字符串处理]
题目链接:http://codeforces.com/problemset/problem/883/H Time limit: 3000 ms Memory limit: 262144 kB Koly ...
- CF1072A Palindromic Twist 思维
Palindromic Twist time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- UVA1471-Defense Lines(思维+STL)
Problem UVA1471-Defense Lines Accept: 297 Submit: 2776Time Limit: 9000 mSec Problem Description Aft ...
- CodeForces - 988D(思维STL)
原文地址:https://blog.csdn.net/weixin_39453270/article/details/80548442 博主已经讲的很好了 题意: 从一个序列中,选出一个集合,使得集合 ...
- CSL 的字符串(思维+STL操作)
链接:https://ac.nowcoder.com/acm/contest/551/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 旋转子段 (思维stl)
题目: 大概意思就是给你一个序列,你可以选择一段区间使它左右翻折一遍,然后呢,从1到n找一遍,看a[i]==i的数最多是多少. 其实刚才我已经把暴力思路说出来了,枚举每一个区间长度,枚举每一个左端点, ...
- Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths (思维)
题意:有一个\(n\)x\(m\)的矩阵,从\((1,1)\)出发走到\((n,m)\),问最少修改多少个数,使得所有路径上的数对应相等(e.g:\((1,2)\)和\((n-1,m)\)或\((2, ...
- STL——迭代器的概念
迭代器是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物. 1 迭代器设计思维——STL关键所在 不论是泛型思维或STL的实际运用,迭代器都扮演这重要的角色.STL的中心思想在于:将数 ...
- STL迭代器------Traits编程技法详细理解(一)
最近在看STL源码解析的迭代器(iterators)一章,涉及到c++ Traits的编程技法,刚开始看时一头雾水,反复看了好几遍之后才理解这个东西,因此来写写在这方面的理解,如有错误,希望读者指正. ...
随机推荐
- POJ 2728 Desert King | 01分数规划
题目: http://poj.org/problem?id=2728 题解: 二分比率,然后每条边边权变成w-mid*dis,用prim跑最小生成树就行 #include<cstdio> ...
- JavaScript对iframe的DOM操作
在IE6.IE7中,我们可以使用 document.frames[ID].document 来访问iframe子窗口中的document对象,可是这是不符合W3C标准的写法,也是IE下独有的方法,在F ...
- HDU1281: 棋盘游戏(二分图匹配)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 学习tcpIp必备的抓包工具wireshark
wireshark是一个优秀的抓包工具 ip.src=192.168.10.123 发送http的一端 ip.dst=192.168.10.126 接收http的一端 如下图所示:
- Java设计模式の观察者模式(推拉模型)
目录: 一.观察者定义 二.观察者模式的结构(推模式实现) 三.推模型和拉模型(拉模式实现) 四.JAVA提供的对观察者模式的支持 五.使用JAVA对观察者模式的支持(自带推模式实现实例) 一.观察者 ...
- ZooKeeper屏障和队列的指南(七)
引言 在这个指南中,使用展示了使用ZooKeeper实现的屏障和生产-消费队列.我们分别称这些类为Barrier和Queue.这些例子假定你至少有一个运行的ZooKeeper服务. 两个原语都使用下面 ...
- oracle 存储过程 技巧
我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集 ...
- [洛谷P3763] [TJOI2017]DNA
洛谷题目链接:[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其 ...
- MyBatis框架的使用及源码分析(八) MapperMethod
从 <MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory> 文中,我们知道Mapper,通过MapperProxy ...
- concurrent.futures 使用及解析
from concurrent.futures import ThreadPoolExecutor, as_completed, wait, FIRST_COMPLETED from concurre ...