题目链接:

http://acm.hust.edu.cn/vjudge/problem/96343

I Want That Cake

Time Limit: 3000MS
64bit IO Format: %lld & %llu

题意

有m块饼,有两个队各n个人站成一排,现在从第一个人开始吃饼,每个人至少吃一个最多吃k个,最后吃到饼的人所在的队伍胜,现在双方都采取最优策略,问哪个队能胜。

题解

如果两个队站队的形式是ABABAB,那么这就是个明显的博弈论了,然后并不一定是这样站的,不过没关系,我们可以把相邻的相同队伍的看成一个人,那么久变成ABABA的形式了,虽然这样处理之后每个‘人’能吃的饼的限制不同了,但是我们可以直接干一发dfs(记忆化),根据必胜态推出所有的状态。

注:必胜态:存在一个后继为必败态;必败态:所有的后继都为必胜态

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define prf printf typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;
const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn=2222; int n,m,k; int dp[maxn][maxn];
char str[maxn]; VI lis;
int dfs(int cur,int lef){
if(dp[cur][lef]!=-1) return dp[cur][lef];
int& ret=dp[cur][lef];
if(lef<=lis[cur]*k) return ret=1;
ret=0;
for(int i=lis[cur];i<=lis[cur]*k;i++){
if(dfs(cur+1,lef-i)==0) return ret=1;
}
return ret;
} void init(){
clr(dp,-1);
lis.clear();
} int main() {
int tc,kase=0;
scf("%d",&tc);
while(tc--){
init();
scf("%d%d%d",&n,&m,&k);
scf("%s",str); int len=strlen(str); for(int i=0;i<len;i++){
int j=i;
while(j<len&&str[i]==str[j]) j++; j--;
lis.pb(j-i+1);
i=j;
}
int ans=dfs(0,m);
prf("Case #%d: ", ++kase);
if(ans){
if(str[0]=='A') puts("A");
else puts("B");
}else{
if(str[0]=='A') puts("B");
else puts("A");
}
}
return 0;
} //end-----------------------------------------------------------------------

最新文章

  1. 【前端构建】WebPack实例与前端性能优化
  2. UWP Composition API - GroupListView(一)
  3. Lucene系列-facet
  4. atitit &#160;验证码理论与概览与&#160;验证码规范&#160;解决方案.docx
  5. Windows Server 2008 R2中的ASP.NET环境架设
  6. Train Problem I 分类: HDU 2015-06-26 11:27 10人阅读 评论(0) 收藏
  7. navigator.userAgent.indexOf来判断浏览器类型
  8. org.springframework.web.servlet.PageNotFound No mapping found for HTTP request with URI [/AssetRepair/assetRepairController/test.do] in DispatcherServlet with name &#39;assetrepair&#39;
  9. 【转载】 硬盘主引导记录(MBR)及其结构详解
  10. PNG文件结构分析 ---Png解析
  11. CSS 样式二
  12. dojo 图表制作教程
  13. Java Lambda简明教程(一)
  14. javascript异步加载详解(转)
  15. HAproxy部署配置
  16. Spring Boot 学习之路二 配置文件 application.yml
  17. 学习熟悉箭头函数, 类, 模板字面量, let和const声明
  18. Postman A请求的返回值作为B请求的入参( 之‘’token‘’ ,用代码设置全局变量)
  19. 认识Python&amp;基础环境搭建
  20. C# 无法识别的消息版本。

热门文章

  1. Linuxg环境搭建
  2. 关于Xshell无法连接本地虚拟机的问题
  3. linux查看文件命令tail的使用
  4. &#39;express&#39;不是内部或外部命令, 也不是可运行的程序, 或批处理文件
  5. 20155317 王新玮 2006-2007-2 《Java程序设计》第4周学习总结
  6. 【JUC源码解析】ReentrantReadWriteLock
  7. 180727-时序数据库InfluxDB之备份和恢复策略
  8. appium -- 页面出现弹窗,关闭后,无法识别页面元素(转)
  9. Linux 安装Redis&lt;准备&gt;(使用Mac远程访问)
  10. Python教程 深入条件控制