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),求多少对不相交的回文串. 思路:可以用回文树求出以每个位置 ...
随机推荐
- CC2530芯片介绍
CC2530,体积更小,功能全, C8051内核,使用起来跟平时的单片机没什么两样,就是程序复杂一些,需要一些时日才能看懂,吃透就更长了,而且对于CC2530TI公司提供了一套完整的解决方案,有布线图 ...
- Linux,实时获取磁盘空间
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <sys/statfs ...
- head tail 命令
[一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat ...
- Windows不能在本地计算机启动OracleDBConsoleorcl .错误代码2
Windows 不能在 本地计算机 启动 OracleDBConsoleorcl.有关更多信息,查阅系统事件日志.如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2. ...
- 【转】如何实现一个malloc
任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至 ...
- 【BZOJ-1901】Dynamic Rankings 带修主席树
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7292 Solved: 3038[Su ...
- mysql查询一天,查询一周,查询一个月的数据【转】
转自:http://www.cnblogs.com/likwo/archive/2010/04/16/1713282.html 查询一天: select * from table where to_d ...
- adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决
adt-bundle-linux-x86_64-20131030下新建project提示找不到adb和R.java问题的解决 在ubuntu14.04下,搭建Android开发环境,下载官方的adt- ...
- 创业公司求IOS、Android攻城狮一枚
地点:北京CBD附近(地铁1号线大望路) 魅力值:送珍贵期权 你要会: 1. IOS或者Android开发 2.可以处理类似微视/秒拍的视频录制功能 3.熟悉jso ...
- DS18B20测温
项目需要实现分布式大规模测温,需要52个测温点,采样DS18B20进行设计. 30cm一个点,一共8个点串联.采用国标单芯单股纯铜硬线BV0.5做导线,测试一会儿正常,一会儿不正常.后面换线了,测试正 ...