CF1093B Letters Rearranging 题解
Content
有 \(t\) 次询问,每次询问给定一个字符串 \(s\)。定义一个“好的字符串”为不是回文串的字符串。对于每一次询问,求出任意一个重新排列能够得到的“好的字符串”,或者这不可能实现。
数据范围:\(1\leqslant t\leqslant 100,1\leqslant|s|\leqslant 1000\)。
Solution
首先我们来判断一下,什么样的情况下一个回文串无法变成一个非回文串?显然是这个回文串里面只有一种字符的情况下。那么其他的情况下,如何讲一个回文串变成一个非回文串?我们可以先找到中间的一个字符串(如果长度是偶数,随便取左边还是右边都行),然后开始往左扫、往右扫,一旦发现有了和当前字符不一样的字符,就将这两个字符交换,不然换了之后还是回文串。
接下来讲一下,如何判断一个字符串是否是回文串?
我们定一个左边界 \(l\) 和右边界 \(r\),规定 \(l\leqslant r\)(尤其是在字符串的长度是奇数的情况下)。那么我们可以直接往中间一起扫,一旦有两个字符串不相同,那么这个字符串就不是回文串了。如果到了中间还没有不符合条件的情况出现的话,那么这个字符串就是回文串了。
至于判断一个字符串是否只有一种字符和上面的情况类似,只要发现有两个不同的字符就不可能会是的,扫完之后如果还没有出现有不同字符的情况,那么这个字符串就只有一种字符了。
Code
int t;
int main() {
getint(t);
while(t--) {
string s;
cin >> s;
int len = s.size(), flagno = 1, flagpa = 1, i, j;
_for(i, 1, len - 1) if(s[i] != s[i - 1]) flagno = 0;
for(i = 0, j = len - 1; i <= j; ++i, --j)
if(s[i] != s[j]) flagpa = 0;
if(flagno) {puts("-1"); continue;}
if(flagpa) {
int k = i;
while(s[k] == s[i] && k < len - 1) k++;
if(s[k] == s[i]) {
int k0 = i;
while(s[k0] == s[i] && k0 > 0) k0--;
swap(s[k0], s[i]);
}
else swap(s[k], s[i]);
}
cout << s << endl;
}
return 0;
}
CF1093B Letters Rearranging 题解的更多相关文章
- Codeforces Round 56-B. Letters Rearranging(思维)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 题解合集 (update on 11.5)
收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...
- Educational Codeforces Round 56 (Rated for Div. 2) ABCD
题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次 ...
- Educational Codeforces Round 56 (Rated for Div. 2)
涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstd ...
- Educational Codeforces Round 56 Solution
A. Dice Rolling 签到. #include <bits/stdc++.h> using namespace std; int t, n; int main() { scanf ...
- CF-1093 (2019/02/10)
CF-1093 1093A - Dice Rolling 输出x/2即可 #include<bits/stdc++.h> using namespace std; int main() { ...
- 【Leetcode周赛】从contest-91开始。(一般是10个contest写一篇文章)
Contest 91 (2018年10月24日,周三) 链接:https://leetcode.com/contest/weekly-contest-91/ 模拟比赛情况记录:第一题柠檬摊的那题6分钟 ...
- Codeforces Edu Round 56 A-D
A. Dice Rolling 把\(x\)分解为\(a * 6 + b\),其中\(a\)是满6数,\(b\)满足\(1 <= b < 6\),即可... #include <io ...
- LeetCode题解之 Reverse Only Letters
1.题目描述 2.题目描述 利用栈实现逆序. 3.代码 string reverseOnlyLetters(string S) { || S.size() == ) return S; stack&l ...
随机推荐
- 解决springboot启动日志异常问题
问题描述:springboot启动异常,启动后没有日志打印. 问题原因:slf4j日志实现重复,找不到对应实现类. 问题应对: 1. 是不是项目没起来---->打印的日志数据,到这里就不打印了, ...
- Session和Cookie的原理,以及在分布式应用中出现的问题和解决方案
产生原因 由于http协议是无状态的,同一个浏览器对服务器的两次请求之间是没有关系的,服务器认为两次请求都是全新的请求,不会记住上次请求成功的数据.然而现有的业务常常需要服务器能记住用户的访问情况, ...
- Python中关于join函数的陷阱?
目录 说明 数据说明 正确示例 错误示例 解决办法 说明 最近在用Python的join函数连接多个列表时,出现了如下两个错误,即合并类型不一致.折腾了很久才找到原因,真是基础不牢,地动山摇. Typ ...
- R语言与医学统计图形-【20】ggplot2图例
ggplot2绘图系统--图例:guide函数.标度函数.overrides.aes参数 图例调整函数guide_legend也属于标度函数,但不能单独作为对象使用,即不能如p+guide_legen ...
- kubernetes部署haproxy、keepalived为kube-apiserver做集群
也可以用nginx.keepalived做负载均衡,看大家的需求. # yum -y install haproxy keepalived haproxy的配置文件(三台一样): cat > / ...
- 3步!完成WordPress博客迁移与重新部署
本文来自于轻量应用服务器征文活动的用户投稿,已获得作者(昵称nstar)授权发布. 由于现有的服务器已经到期,并且活动已经取消,续费一个月145元比较贵,于是参加了阿里云的活动购买一台轻量应用服务器. ...
- Learning Spark中文版--第五章--加载保存数据(2)
SequenceFiles(序列文件) SequenceFile是Hadoop的一种由键值对小文件组成的流行的格式.SequenceFIle有同步标记,Spark可以寻找标记点,然后与记录边界重新 ...
- Flume(一)【概述】
目录 一.Flume定义 二.Flume基础架构 1.Agent 2.Source 3.Sink 4.Channel 5.Event 一.Flume定义 Flume是Cloudera公司提供的一个 ...
- 集合类——Collection、List、Set接口
集合类 Java类集 我们知道数组最大的缺陷就是:长度固定.从jdk1.2开始为了解决数组长度固定的问题,就提供了动态对象数组实现框架--Java类集框架.Java集合类框架其实就是Java针对于数据 ...
- 【Linux】【Shell】【text】Vim
文本编辑器: 文本:纯文本,ASCII text:Unicode: 文本编辑种类: 行编辑器:sed 全屏编辑器:nano, vi vi: Visual Interface vim: Vi IMpro ...