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),求多少对不相交的回文串. 思路:可以用回文树求出以每个位置 ...
随机推荐
- noip2011 公交观光
描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...
- 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0
MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...
- TI-Davinci开发系列之二使用CCS5.2TI Simulator模拟环境调试DSP程序
上接博文<TI-Davinci开发系列之一CCS5.2的安装及注意事项>. 如何没有实际的开发板或者仿真器,可以使用CCS自带的TISimulator来学习与熟悉CCS开发调试环境.下面是 ...
- Hibernate查询之Criteria查询
转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式.Criteria ...
- Linux下l2tp客户端xl2tpd的安装配置
1.下载xl2tp http://pkgs.org/search/?query=xl2tp&type=smart选择相应的版本进行下载 2.安装xl2tp和ppp yum install xl ...
- [Node.js] Introduction to apiCheck.js
timeoutLog.js: var apiCheckFactory = require('api-check'); var myCheck = apiCheckFactory(); module.e ...
- linux 系统调优2
换作Linux: 1.杀使用内存大,非必要的进程 2.增加连接数 3.磁盘分区的碎片整理 4.服务优化,把不要的服务关闭 5.更换性能更好的硬件,纵向升级 常见优化手段: 1.更换性能更好的硬件,纵 ...
- 自主创建tcpdump/wireshark pcap文件
pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump.wireshark等等,了解pcap格式可以加深对原始数据包的了解,自己也可以手工构造任意的数据包进行测试. p ...
- 两款Mac下的视频下载利器
1 iSkysoft iTube Studio 2.jaksta mac
- DataGrid缓冲加载数据
当datagrid的滚动条拉到4/3的时候去加载数据.. public MainWindow() { InitializeComponent(); ; i <= ; i++) { Class1 ...