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)超级好题!!!的更多相关文章

  1. CSU - 2056 a simple game

    Description 这一天,小A和小B在玩一个游戏,他俩每人都有一个整数,然后两人轮流对他们的整数进行操作,每次在下列两个操作任选一个: (1)对整数进行翻转,如1234翻转成4321 ,1200 ...

  2. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  3. CSU - 1581 Clock Pictures (KMP的变形题,难想到)

    题目链接: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1581 题目意思:告诉你现在有两个钟,现在两个钟上面都有n个指针,告诉你指针的位置, ...

  4. poj3461 字符串匹配 熟悉kmp算法第一题

     题意:  计算一个字符串在另一个字符串中出现的次数. #include<cstdio> #include<cstring> #include<algorithm> ...

  5. POJ 2541 Binary Witch(逆序KMP,好题)

    逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/s ...

  6. CSU 1511 残缺的棋盘 第十届湖南省赛题

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1511 题目大意:在一个8*8的棋盘中,给你一个起点位置和一个终点位置,同时也给你一个陷阱 ...

  7. CSU 1507 超大型LED显示屏 第十届湖南省赛题

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507 解题思路:这是一道模拟题,看了那么多人的代码,我觉得我的代码是最简的,哈哈,其实就 ...

  8. Problem 2128 最长子串(kmp+strstr好题经典)

     Problem 2128 最长子串 Accept: 134    Submit: 523Time Limit: 3000 mSec    Memory Limit : 65536 KB  Probl ...

  9. UVA - 10014 - Simple calculations (经典的数学推导题!!)

    UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...

随机推荐

  1. 数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题

    当函数以 apply 方式调用时, 传参方式是一个由各个参数组成的数组或类数组(一个有length属性的对象),传入参数个数取决于 length 的值,例如,某个对象 args.length=3; a ...

  2. 从零开始学习html(四)认识标签(第三部分)

    一.使用<a>标签,链接到另一个页面 <!DOCTYPE HTML> <html> <head> <meta http-equiv="C ...

  3. 利用:before和:after伪类制作类似微信对话框

    今天学到了怎么做一个小三角形,进而结合其他属性把类似微信对话框的图形做出来了. 先做出如下形状: .arrow { width: 30px; height:30px; border-width:20p ...

  4. 利用GDAL从内存中直接解析图像数据

    对于网络数据源,调度中可以把数据写入本地,然后读取本地数据格式进行影像的解析(地形有时候也用tif等格式). 此种方式会每次调度进行不必要的IO开销和时间花费. GDAL提供了相应的接口,直接从内存中 ...

  5. 微信小程序“满月”:尝鲜之后你还用过它吗?

    距离 2017 年 1 月 9 日微信小程序上线,整整过去了一个月时间.和互联网时代每天出现的众多新鲜事物相似,小程序甫一诞生,立即占据了各大科技媒体网站头屏并引起社交圈的兴奋讨论.由于背靠微信,纷纷 ...

  6. 从CVE-2018-1273看漏洞分析

    漏洞分析的边界 漏洞分析最应该关注的是漏洞相关的代码,至于其余的代码可以通过关键位置下断点,来理解大概功能. 其中最关键的就是了解数据流,找到离漏洞位置最近的 原始数据 经过的位置,然后开始往下分析, ...

  7. Pig limit用法举例

    lmt = limit data 10;   只获取指定条数的数据,不能保证每次得到的结果一致,先执行order再limit可以保证一致.   输入数据全部载入.   会触发reduce阶段   a ...

  8. 【Kettle】1、简单介绍

    本人为转载,感谢作者的辛勤劳作:http://blog.csdn.net/rotkang/article/details/20810921 ------------------------------ ...

  9. Mysql5.7 的错误日志中最常见的note级别日志解释

          在使用mysql5.7的时候,发现了不少在mysql5.6上不曾见过的日志,级别为note, 最常见的note日志以下三种,下面我们来逐个解释. 第一种,Aborted connectio ...

  10. CRM总结

    一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销 ...