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 题解的更多相关文章

  1. Codeforces Round 56-B. Letters Rearranging(思维)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  2. 题解合集 (update on 11.5)

    收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...

  3. Educational Codeforces Round 56 (Rated for Div. 2) ABCD

    题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次 ...

  4. Educational Codeforces Round 56 (Rated for Div. 2)

    涨rating啦.. 不过话说为什么有这么多数据结构题啊,难道是中国人出的? A - Dice Rolling 傻逼题,可以用一个三加一堆二或者用一堆二,那就直接.. #include<cstd ...

  5. Educational Codeforces Round 56 Solution

    A. Dice Rolling 签到. #include <bits/stdc++.h> using namespace std; int t, n; int main() { scanf ...

  6. CF-1093 (2019/02/10)

    CF-1093 1093A - Dice Rolling 输出x/2即可 #include<bits/stdc++.h> using namespace std; int main() { ...

  7. 【Leetcode周赛】从contest-91开始。(一般是10个contest写一篇文章)

    Contest 91 (2018年10月24日,周三) 链接:https://leetcode.com/contest/weekly-contest-91/ 模拟比赛情况记录:第一题柠檬摊的那题6分钟 ...

  8. Codeforces Edu Round 56 A-D

    A. Dice Rolling 把\(x\)分解为\(a * 6 + b\),其中\(a\)是满6数,\(b\)满足\(1 <= b < 6\),即可... #include <io ...

  9. LeetCode题解之 Reverse Only Letters

    1.题目描述 2.题目描述 利用栈实现逆序. 3.代码 string reverseOnlyLetters(string S) { || S.size() == ) return S; stack&l ...

随机推荐

  1. scanner对象,顺序及选择结构

    scanner对象 基本语法: Scanner s = new Scanner(System.in) 使用next()和nextLine()读取前,使用hasNext()和hasNextLine()来 ...

  2. Codeforces 796E - Exam Cheating(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 当被数据结构搞自闭的 tzc 信心满满地点开一道 *2400 的 dp 题时-- 却发现自己不会做?! 这足以证明蒟蒻 dp 之菜/dk/ ...

  3. zabbix监控php状态

    环境介绍: php /usr/loca/php nignx /usr/loca/nginx  配置文件都是放在extra中 修改php-fpm的配置文件启动状态页面 pm.status_path = ...

  4. ggplot2 图例及分页参数

    图例: 1 theme(legend.title =element_blank()) 2 guides(fill = guide_legend(title = NULL)) # 去掉图例title 3 ...

  5. Spring 注解开发

    目录 注解开发简介 常用注解 启用注解功能 bean 定义:@Component.@Controller.@Service.@Repository bean 的引用类型属性注入:@Autowired. ...

  6. 判断是否有重复,判断字符串是否有重复汉字【c#】

    string corn = "公司"; int n = 0; if (tbCorporateName.Text.IndexOf(corn) > -1) { string co ...

  7. 学习java的第十七天

    一.今日收获 1.java完全学习手册第三章算法的3.1比较值 2.看哔哩哔哩上的教学视频 二.今日问题 1.在第一个最大值程序运行时经常报错. 2.哔哩哔哩教学视频的一些术语不太理解,还需要了解 三 ...

  8. 日常Java 2021/9/23

    练习使用Math.random函数,以及JOptionPane.showMessageDialog(null,"字符串","Results",JOptionPa ...

  9. A Child's History of England.25

    It was a September morning, and the sun was rising, when the King was awakened from slumber by the s ...

  10. CR LF 的含义

    可以参考: 转载于:https://www.cnblogs.com/babykick/archive/2011/03/25/1995977.html