YZOI Easy Round 2_回文串 string
原文链接:http://laphets1.gotoip3.com/?id=18
Description
给出一个由小写字母组成的字符串,其中一些字母被染黑了,用?表示。已知原来的串不是
一个回文串,现在让你求出字典序最小的可能的串。像’a’,’aba’,’abba’这样对称的串叫做回
文串。
每个测试点有5 组小测试点。
Input
5 行,5 个字符串。
Output
5 行,5 个字符串。若无解,输出”Orz,I can not find it!”
这个题目主要就是利用了一种贪心的思想 总的思路就是先把所有的问号先将用最小的字母'a'来代替 假如说不行的话 就将最后一个问号用b来代替 这样得到的便一定是最优的
接下来便是分类讨论的事了 :
如果这个给出的串没有问号 那么便直接判断这个串是不是回文 如果是的话我们便肯定无法再将其变成回文 这里直接输出ORZ便行 反之如果本来就不是回文 直接输出当前的串即可
接下来 对于只有一个问号的情况 我们便先判断有没有这样一种情况存在 即是否只有一个问号 并且这个问号刚好在这个奇数串的中间位置 如果存在 那么便不需要管这个问号是什么(他对该串是否为回文无影响)那么只需要再做一遍回文的check() 同理进行输出 那么如果这个处于中间的问号之前还有一个或多个问号呢 这是我们只需要再将中间问号之前的那个串再看做一个新串 再次找出他这个串中最后一个问号的所处位置 并把这些所有的问号都代以a 再用check()做一遍 如果还是回文 那么我们便把这个新串里的最后一个问号改成 b 即可
另外,对于不符合以上情况的情况(即这个串不是奇数串 然后有一个及以上的问号) 我们便可直接扫一遍 把所有的问号变成 a 并把最后一个 问号记录下来 并再执行一次check() 如果不是回文 那么当然便是最优解了 此时输出即可 当然如果还是回文 那么同样把新串的最后一位标记变成 b 输出即可 此时则一定为最优解 ......
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10000;
char s[maxn];
int n,cnt,last;
bool check()
{
for(int i=1;i<=n;i++)
if(s[i]!=s[n+1-i])
return false;
return true;
}
void print()
{
for(int i=1;i<=n;i++)
printf("%c",s[i]);
printf("\n");
}
void work()
{
if(cnt==1)
{
if(check())
printf("Orz,I can not find it!\n");
else
{
s[last]='a';
print();
return;
}
}
int t=0;
for(int i=1;i<last;i++)
if(s[i]=='?')
t=i;
for(int i=1;i<=n;i++)
if(s[i]=='?')
s[i]='a';
if(check())
s[t]='b';
print();
}
void solve()
{
cnt=0;
for(int i=1;i<=n;i++)
{
if(s[i]=='?')
{
cnt++;
last=i;
}
}
if(cnt==0)
{
if(check())
{
printf("Orz,I can not find it!\n");
return;
}
else
{
print();
return;
}
}
if((n&1)&&(last==(n+1)>>1))
{
work();
return;
} for(int i=1;i<=n;i++)
if(s[i]=='?')
s[i]='a';
s[last]='b';
print();
}
int main()
{
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
for(int t=1;t<=5;t++)
{
scanf("%s",s+1);
n=strlen(s+1);
solve();
}
}
YZOI Easy Round 2_回文串 string的更多相关文章
- YZOI Easy Round 2_化简(simplify.c/cpp/pas)
Description 给定一个多项式,输出其化简后的结果. Input 一个字符串,只含有关于字母x 的多项式,不含括号与分式,没有多余的空格. Output 一个字符串,化简后的多项式,按照次数从 ...
- HDOJ 5421 Victor and String 回文串自己主动机
假设没有操作1,就是裸的回文串自己主动机...... 能够从头部插入字符的回文串自己主动机,维护两个last点就好了..... 当整个串都是回文串的时候把两个last统一一下 Victor and S ...
- Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome 字典树/半回文串
E. Ann and Half-Palindrome Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- Codeforces Round #305 (Div. 2) A. Mike and Fax 暴力回文串
A. Mike and Fax Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/548/pro ...
- HDU5421 Victor and String 和 APIO2014 回文串
两道差不多的题,都是回文自动机right集合处理相关. Victor and String Victor loves to play with string. He thinks a string i ...
- Harry and magic string HDU - 5157 记录不相交的回文串对数
题意: 记录不相交的回文串对数 题解: 正着反着都来一遍回文树 用sum1[i] 表示到 i 位置,出现的回文串个数的前缀和 sun2[i]表示反着的个数 ans+=sum1[i-1]*sum2[i] ...
- Codeforces Round #410 (Div. 2) A. Mike and palindrome【判断能否只修改一个字符使其变成回文串】
A. Mike and palindrome time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 2015 UESTC Training for Search Algorithm & String - M - Palindromic String【Manacher回文串】
O(n)的复杂度求回文串:Manacher算法 定义一个回文值,字符串S是K重回文串,当且仅当S是回文串,且其长度为⌊N/2⌋的前缀和长度为⌊N/2⌋的后缀是K−1重回文串 现在给一个2*10^6长度 ...
- HDU - 5157 :Harry and magic string (回文树,求多少对不相交的回文串)
Sample Input aca aaaa Sample Output 3 15 题意: 多组输入,每次给定字符串S(|S|<1e5),求多少对不相交的回文串. 思路:可以用回文树求出以每个位置 ...
随机推荐
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- android设备连接不上电脑的解决方法
先检查手机usb调试是否开启,已经开启还是连不上按照以下步骤操作: 1. 打开cmd,输入adb devices 查看设备是否连接 2.服务未启动,先杀掉服务:adb kill-server 3.启 ...
- jquery 书写全选反选功能
书写一个后台管理中用到的全选反选功能.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- pgsql自动安装shell脚本整理
前面不断在vm虚拟机上测试pgsql,发觉安装还是有些麻烦的. 所以就收集了一些 1,http://www.davidghedini.com/pg/entry/postgresql_9_5_scrip ...
- 20169210《Linux内核原理与分析》第七周作业
第一部分:实验 首先还是网易云课堂的实验内容,扒开系统调用的三层皮(下),分为两部分: 1.给MenuOS增加time和time-asm命令 2.系统调用在内核代码中的处理过程 给MenuOS增加ti ...
- ECMAScript和JavaScript的联系
ECMAScript是一种规范,一种标准.类似于编程语言的接口,定义好一套规范后,各大浏览器厂商遵循规范各自实现之,同时,也做了一些扩展,这些扩展就是规范里面没有的. JavaScript是一种实现, ...
- richTextBoxFontClass
使用 private void button1_Click(object sender, EventArgs e) { RichTextBoxCtrl.richTextBoxFontClass r = ...
- 【转】android的startActivityForResult学习心得
http://blog.csdn.net/yanzi1225627/article/details/7800529 从昨晚到现在终于调试通了一个startActivityForResult的例子,网上 ...
- QuaZip实现多文件打包
项目需求: 在Goldenfarm客户端中当用户选择了本地场景文件,并进行本地场景文件分析后会产生分析结果,分析结果主要包括:贴图纹理.可渲染层等,其中贴图纹理指出了在场景文件中使用到的贴图或其它文件 ...
- Cocos2d-x中获取设备语言的方法
1.cocos2dx获取设备语言的方法:CCApplication::sharedApplication()->getCurrentLanguage() 2.cocos2dx 2.1.4支持识别 ...