CSU 2056 a simple game (正反进行KMP)超级好题!!!
Description
这一天,小A和小B在玩一个游戏,他俩每人都有一个整数,然后两人轮流对他们的整数进行操作,每次在下列两个操作任选一个:
(1)对整数进行翻转,如1234翻转成4321 ,1200翻转成21
(2)将整数除以10,如1234/10=123,1/10=0
当操作过程中出现a==b时,则小A就赢了,而操作一直进行下去或不能使a==b则算小B赢。
现在小A求助于你,想让你帮他在知道两人的整数时小A能不能赢,假设每次都是小A先手,并且两人都是采取最优策略
Input
首先输入T(T <= 100),表示有T组数据,然后接下来有T行,每行有两个整数a,b(0 <= a,b < 10100000)
Output
有T行,当小A赢了则输出"Yes",否则输出"No"
Sample Input
4
1234 123
123 321
1234 12345
123 123
Sample Output
Yes
Yes
No
Yes
Hint
Source
Author
wsf
分析:
每次都是A先手,且两个人每次都是采取的最优策略!!!
所有他们采取的都是对自己有利的策略
这句话需要好好理解
两个人都只可以操作自己的数
两个操作一个是翻转,一个是除以10
一开始需要将二者的后导0全部去掉
是因为后导0都可以通过除10或者翻转消去,没有意义
便于进行kmp,所以需要消去
很奇妙
还有影响匹配
先拿着B当作模板串,A当作文本串进行KMP匹配,然后将B翻转,然后再将翻转后的B当做模板串,A当作文本串进行KMP
为什么B需要翻转然后再进行一个KMP呢?
因为有翻转操作呀
只要这两个KMP中有一次匹配成功了,那么A是可以赢的,输出yes
注意:
1.一开始去除后导0的时候,需要保证串的长度至少大于1
比如输入的一个串是0的话,你消去了这仅有的1个0,你还怎么比较啊
2.翻转操作便捷函数:reverse(moban,moban+l)!!!!,超级方便有木有
code:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<memory>
#include<algorithm>
using namespace std;
#define max_v 1234567
char moban[max_v];
char wenben[max_v];
int next1[max_v];
int sum;
int flag;
void getnext(char s[],int m)
{
next1[]=;
next1[]=;
for(int i=; i<m; i++)
{
int j=next1[i];
while(j&&s[i]!=s[j])
j=next1[j];
if(s[i]==s[j])
next1[i+]=j+;
else
next1[i+]=;
}
}
void kmp(char ss[],char s[],int n,int m)
{
getnext(s,m);
int j=;
for(int i=; i<n; i++)
{
while(j&&s[j]!=ss[i])
j=next1[j];
if(s[j]==ss[i])
j++;
if(j==m)
{
flag=;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",wenben,moban); flag=; int L=strlen(wenben);
int l=strlen(moban); while(wenben[L-]==''&&L>)
wenben[L--]='\0'; while(moban[l-]==''&&l>)
moban[l--]='\0'; kmp(wenben,moban,L,l); reverse(moban,moban+l); kmp(wenben,moban,L,l); if(flag)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
CSU 2056 a simple game (正反进行KMP)超级好题!!!的更多相关文章
- CSU - 2056 a simple game
Description 这一天,小A和小B在玩一个游戏,他俩每人都有一个整数,然后两人轮流对他们的整数进行操作,每次在下列两个操作任选一个: (1)对整数进行翻转,如1234翻转成4321 ,1200 ...
- hdu 1711 KMP算法模板题
题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...
- CSU - 1581 Clock Pictures (KMP的变形题,难想到)
题目链接: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1581 题目意思:告诉你现在有两个钟,现在两个钟上面都有n个指针,告诉你指针的位置, ...
- poj3461 字符串匹配 熟悉kmp算法第一题
题意: 计算一个字符串在另一个字符串中出现的次数. #include<cstdio> #include<cstring> #include<algorithm> ...
- POJ 2541 Binary Witch(逆序KMP,好题)
逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/s ...
- CSU 1511 残缺的棋盘 第十届湖南省赛题
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1511 题目大意:在一个8*8的棋盘中,给你一个起点位置和一个终点位置,同时也给你一个陷阱 ...
- CSU 1507 超大型LED显示屏 第十届湖南省赛题
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507 解题思路:这是一道模拟题,看了那么多人的代码,我觉得我的代码是最简的,哈哈,其实就 ...
- Problem 2128 最长子串(kmp+strstr好题经典)
Problem 2128 最长子串 Accept: 134 Submit: 523Time Limit: 3000 mSec Memory Limit : 65536 KB Probl ...
- UVA - 10014 - Simple calculations (经典的数学推导题!!)
UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...
随机推荐
- Django基础五之django模型层(二)多表操作
一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...
- 转:PHP导出excel文件的几种方式
PHP导出excel文件的几种方式 文章来源:http://www.cnblogs.com/fredshare/archive/2012/10/29/2744243.html 先说说动态生成的内容当作 ...
- animation 秒简单笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JQuery和原生JavaScript实现网页定位导航特效
慕课网的一个小课程,练习了一遍,不足之处,欢迎指正(照片在本地,大家可以着重看代码哈): <!DOCTYPE html> <html lang="en"> ...
- JavaScript、HTML、CSS学习—思维导图
- arcgis JavaScript 加载 mapbox地图
mapbox 地图现在是越来越好看了, 随便试 /** * Created by Administrator on 2018/5/15 0015. */ import * as esriLoader ...
- frame shiro 概述
权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权. 身份认证包括用户口令登陆.指纹验证.刷卡等方式. 授权即访问控制,控制谁能访问哪些资源,主体身份认证后分配权限以访问自己可以访问的资源. ...
- Ubuntu16安装GPU版本TensorFlow(个人笔记本电脑)
想着开始学习tf了怎么能不用GPU,网上查了一下发现GeForce GTX确实支持GPU运算,所以就尝试部署了一下,在这里记录一下,避免大家少走弯路. 使用个人笔记本电脑thinkpadE570,内存 ...
- gitlab的仓库迁移到新的gitlab
1.下载原有gitlab源码 git clone http://gitlab.**.com/projectName gitlab地址替换成为新gitlab地址 git remote set-url o ...
- STL中set和map
set 可以认为是数学上的集合,集合中的元素不允许有重复.set特有的操作是高效的插入.删除和执行基本查找. set的插入方法是 insert,由于集合元素的唯一性,insert操作不一定会成功,in ...