FZU
来源:互联网 发布:乐视盒子有线网络设置 编辑:程序博客网 时间:2024/06/18 16:15
题目大意就是给Alice和Bob一人一个字符串,每个人每回合可以对自己的字符串进行两种操作中的一种,反转字符串或删除字符串末尾的那个数,字符串删完将变为“0”
正反KMP两次就好了,如果Alice的字符串包含了Bob的字符串或者包含了Bob翻转后的字符串,那么Alice就可以向Bob步步逼近最后取得胜利,注意题目说的是双方任意一人操作后若两人字符串相同则Alice胜利(一开始还看错了以为必须得是Alice操作完才算胜利)
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;char t[100005];char w[100005];int Next[100005];int lent,lenw;void getnext(){ Next[0]=Next[1]=0; for(int i=1;i<lenw;i++) { int j=Next[i]; while(j&&w[i]!=w[i]) j=Next[j]; if(w[i]==w[j]) Next[i+1]=j+1; else Next[i+1]=0; }}bool kmp(){ int j=0; for(int i=0;i<lent;i++) { while(j&&t[i]!=w[j]) j=Next[j]; if(t[i]==w[j]) j++; if(j==lenw) return true; } return false;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%s%s",t,w); lent=strlen(t); lenw=strlen(w); if(lent<lenw) { printf("Bob\n"); continue; } if(lenw==1&&w[0]=='0') { printf("Alice\n"); continue; } getnext(); if(kmp()) printf("Alice\n"); else { strrev(w); getnext(); if(kmp()) printf("Alice\n"); else printf("Bob\n"); } } return 0;}
阅读全文
0 0
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- 事务隔离级别 脏读 spring 测试
- 练习 2017-08-22
- Android-25种开源炫酷动画框架
- 进程理解
- log4cpp打印日志并输出到控制台简化
- FZU
- Angular自定义指令之compile, link, controller属性详解及实例演示
- kaggle案例--Instacart Market Basket Analysis
- 77. Combinations
- QT 总结(四) 1.中文编码 乱码 2.QFileDialog 打开文件框 3.调用其它UI文件 4.QMessageBox弹窗
- python 提示
- 发短信
- Json缓存到SdCard里
- 【POJ 3041 】Asteroids (匈牙利算法最小点覆盖&二分图)