codeforces 465C.No to Palindromes! 解题报告
题目链接:http://codeforces.com/problemset/problem/464/A
题目意思:给出一个长度为 n 且是 tolerable 的字符串s,需要求出字典序最小的长度也为 n 额下一个tolerable 的 字符串,如果求不出则输出“NO”。字符串被认定为tolerable 需要满足:1、字符串的每一位都是取自字母表中前 p 个字母 2、不是回文串。
直接模拟就可以了。主要包括两个步骤:
(1)从后往前遍历,找到目标位置,也就是需要改动的位置下标。
对于当前需要判断的字符(假设数组下标为i),检查 s[i],s[i-1], s[i-2] 的字符是否相同,不等的话代表找出了目标位置。当然,如果 n = 2,只需要判断s[i] 和 s[i-1]
(2)分析这个下标对下的一个位置到结束位置,每个字符需要作怎样的变动。
有可能目标位置变动后,导致下一个字符和它相等,此时设为 a。
处理的时候,将小写字母转化为整数来处理。
以后尽量拿英语来写注释,希望能锻炼一下蹩脚的英语,可能会有点语法问题,大家请见谅。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
char s[maxn];
int tmp[maxn]; int main()
{
int n, p;
// freopen("in.txt", "r", stdin);
while (scanf("%d%d", &n, &p) != EOF)
{
scanf("%s", s);
for (int i = ; i < n; i++)
tmp[i] = s[i] - 'a' + ;
int k;
int flag = ;
for (int i = n-; i >= && !flag; i--) // find the changed object's id
{
for (int j = tmp[i]+; j <= p && !flag; j++)
{
if (i == ) // n(length) == 1
{
tmp[k=i] = j;
flag = ;
}
else if (i == && j != tmp[i-])
{
tmp[k=i] = j;
flag = ;
}
else if (i >= && j != tmp[i-] && j != tmp[i-])
{
tmp[k=i] = j;
flag = ;
}
}
}
if (!flag)
printf("NO\n");
else
{
k++;
for (; k < n; k++)
{
flag = ;
for (int j = ; j <= p && !flag; j++)
{
if (k == && j != tmp[k-])
{
tmp[k] = j;
flag = ; // ensure every character change only once && the final result is the least lexicographical order
}
else if (k >= && j != tmp[k-] && j != tmp[k-])
{
tmp[k] = j;
flag = ;
}
}
}
for (int i = ; i < n; i++)
printf("%c", tmp[i]-+'a');
puts("");
}
}
return ;
}
codeforces 465C.No to Palindromes! 解题报告的更多相关文章
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.2 Dual Palindromes 解题报告
dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- codeforces 507B. Amr and Pins 解题报告
题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...
- codeforces 500B.New Year Permutation 解题报告
题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...
- codeforces B. Xenia and Ringroad 解题报告
题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...
- codeforces 462C Appleman and Toastman 解题报告
题目链接:http://codeforces.com/problemset/problem/461/A 题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作: (1)每次Toastman得 ...
随机推荐
- 使用find命令查找Linux中的隐藏文件的方法
我们可以在Linux 或者 Unix 系统上使用 find 命令去查询所有(全部)隐藏文件 基本语法如下: 复制代码 代码如下: [root@dabu.info ~]#find /要查找的文/件/夹/ ...
- [反汇编练习] 160个CrackMe之029
[反汇编练习] 160个CrackMe之029. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- ubuntu 卸载干净软件(包括配置文件)
var/cache/apt/archives occupying huge space I am in the process of cleaning up my system. And I see ...
- HDU2256-Problem of Precision(矩阵构造+高速幂)
pid=2256">题目链接 题意:求sqrt(sqrt(2) + sqrt(3)) ^ 2n MOD 1024 思路: 代码: #include <iostream> # ...
- php.ini的载入位置
php.ini文件找不到,载入WINDOS下的,但找不到,后来强制-c查找是OK的.思考,为什么载入window下的ini文件.1.可能是有一个默认路径.2.可能没有路径.默认载入. 问题解决:htt ...
- lucene 自定义评分 (给lucene自带的评分*我们filed的系数) 如搜索结果时间的加权
参见孔浩 lucene 22讲 步骤 1.写一个类继承于 CostomScoreQuery -->覆盖getCostomSorceProvider 方法 2.写一个自己的provider(重写c ...
- vue2.0 + vux (二)Footer组件
1.Footer组件 Footer.vue <!-- 底部 footer --> <template> <div> <tabbar> <!-- 综 ...
- RSA、AES加密解密
RSA #!/usr/bin/env python # -*- coding:utf-8 -*- import rsa import base64 # ######### 1. 生成公钥私钥 #### ...
- VueJS处理逻辑指令:v-if
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- javaweb dev 入
::::关于jsp页面和servlet之间传递参数 JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 ...