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. javascript-初级-day05js函数传参

    JS基础-01 函数传参.参数类型-1 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Conten ...

  2. KNN算法实现对iris数据集的预测

    KNN算法的实现 import pandas as pd from math import dist k = int(input("请输入k值:")) dataTest = pd. ...

  3. 三个 AGC D(AGC037D、AGC043D、AGC050D)

    大概就 lxr 讲了 4 个 AGC 的 D,有一个以前做过了不算,另外三个都会做罢( 为了避免开三个博客就把它们合并到一起了 AGC 037 D lxr:难度顺序排列大概是 037<043&l ...

  4. DirectX12 3D 游戏开发与实战第十章内容(下)

    仅供个人学习使用,请勿转载.谢谢! 10.混合 本章将研究混合技术,混合技术可以让我们将当前需要光栅化的像素(也称为源像素)和之前已经光栅化到后台缓冲区的像素(也称为目标像素)进行融合.因此,该技术可 ...

  5. Matlab流体后处理中的奇淫巧术总结

    Matlab流体后处理中的奇淫巧术总结 主要参考\demos\volvec.m示例 1.等值面绘制 %% Isosurface of MRI Data cla load mri D = squeeze ...

  6. RepeatModeler安装及使用

    如果进行重复序列的预测,则使用RepeatModeler,可自身比对进行查找 安装 (1)下载地址:http://www.repeatmasker.org/RepeatModeler/ (2)Repe ...

  7. R语言与医学统计图形-【23】ggplot2坐标系转换函数

    ggplot2绘图系统--坐标系转换函数 包括饼图.环状条图.玫瑰图.戒指图.坐标翻转. 笛卡尔坐标系(最常见). ArcGIS地理坐标系(地图). Cartesian坐标系. polar极坐标系. ...

  8. MySQL-数据库多表关联查询太慢,如何进行SQL语句优化

    工作中我们经常用到多个left join去关联其他表查询结果,但是随着数据量的增加,一个表的数据达到百万级别后,这种普通的left join查询将非常的耗时. 举个例子:  现在porder表有 10 ...

  9. 疯了吧!这帮人居然用 Go 写“前端”?(二)

    作者 | 郑嘉涛(羣青) 来源|尔达 Erda 公众号 ​ 前言 ​ 上篇我们讲了故事发生的背景,也简单阐述了组件及协议的设想: ​ 一.丰富的通用组件库. 二.组件渲染能力,将业务组件渲染成通用组件 ...

  10. k8s-hpa自动横向扩容

    目录 hpa自动扩容 官方文档 HPA是什么 Horizontal Pod Autoscaler 演练 参数 案例:监控cpu,内存,每秒数据包自动扩容 度量指标 pod清单案例-pod定义cup内存 ...