uestc 第五届ACM趣味程序设计竞赛第二场(正式赛)棋盘
来源:互联网 发布:ubuntu不能切换中英文 编辑:程序博客网 时间:2024/05/31 18:51
棋盘
Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 124 Tried: 377
Submit
Status
Best Solution
Back
Description
UDK和RU在一个白色的方格棋盘上玩游戏,棋盘有N行M列,由N*M个小方格组成。两人轮流进行游戏,UDK先开始,然后是RU。在每一轮游戏中,当前一方需要在棋盘上选择一个1*k或k*1的全白矩形,并将里面的k个小格子全部染成黑色(每轮k的大小都可以由当前玩家自己决定),将最后一个格子染色的一方获得游戏胜利。
现在假设两人都采取最佳的策略,给定棋盘大小,请问谁将获得胜利?
Input
数据的第一行是一个整数T(0 <= T <= 10000),代表一共有T组测试数据。
接下来T行,每行由两个整数N和M组成(1 <= N, M <= 100),表示了每组数据中棋盘的大小。
Output
请严格输出T行,每行仅包括一个字符串"UDK" 或者 "RU",代表每组测试数据对应的胜利一方的姓名。
Sample Input
2
1 2
2 2
Sample Output
UDK
RU
Hint
Sample Input中共有两组数据,其中第一组数据棋盘的大小是1*2,即1行2列,UDK先手,可以直接选择涂1*2的矩阵,把棋盘完全染色从而直接获得胜利。
请严格按照输出规则输出,行末不允许有多余的空格,最后一组数据行末同样需要换行。
Source
第五届ACM趣味程序设计竞赛第二场(正式赛)
题解:博弈题,刚开始时,dp[i][j]表示i行j列时先手胜为1败为0,我就只能想到是如果dp[i-1][j]和的dp[i][j-1]有一个为0时
则dp[i][j]必定为1,因为先手可以走一步就可以达到先手必输的状态,让自己必赢。
但是如果相邻的两个状态都是1呢????
后来看了解题报告才知道自己方向想错了。。
当i和j都是偶数时先手必输,因为后手可以一直摆和先手对称的局面。那这样最后一定是后手赢了。。
当i和j都是奇数时先手必胜。因为先手可以摆一个在最中间。然后就一直跟着后手走。同上。最后先手赢。。
当i和j为奇偶时先手必赢。因为就像我刚开始想的一样。dp[i-1][j]和dp[i][j-1]必定有一个为0就是都是偶数先手必输。
。。。。。。。
最后总结一下:博弈论可以从上一步走一步就可以达到对方必输的局面。后者是跟着对方对称走。最后就会赢。。
#include<cstdio>#include<cstring>int dp[105][105];char di[2][10] = {"RU","UDK"};void Init(){int i,j;for(i=1;i<101;i++){dp[i][1] = 1;dp[1][i] = 1;}for(i=2;i<101;i++)for(j=2;j<101;j++){if(dp[i-1][j]==0 || dp[i][j-1]==0)dp[i][j] = 1;else{if(i%2==0 && j%2==0)dp[i][j] = 0;elsedp[i][j] = 1;}}}int main(){int t,n,m;scanf("%d",&t); Init();while(t--){scanf("%d%d",&n,&m);printf("%s\n",di[dp[n][m]]);}return 0;}
- uestc 第五届ACM趣味程序设计竞赛第二场(正式赛)棋盘
- UESTC 第五届ACM趣味程序设计竞赛第四场(正式赛) 解题报告
- UESTC-第五届ACM趣味程序设计竞赛第四场(正式赛)--不完全解题报告
- UESTC 第七届ACM趣味程序设计竞赛第四场(正式赛)
- UESTC第七届ACM趣味程序设计竞赛第四场(正式赛)
- 第九届ACM趣味程序设计竞赛第二场(正式赛) B
- 电子科技大学第九届ACM趣味程序设计竞赛第二场(正式赛) 题解
- 2016 UESTC 第八届ACM趣味程序设计竞赛第三场(正式赛)(比赛场)B - 保护果实
- UESTC 第五届ACM趣味程序设计竞赛第一场(热身赛,非原创题) 解题报告
- 第八届ACM趣味程序设计竞赛第三场(正式赛)(比赛场)
- 第八届ACM趣味程序设计竞赛第三场(正式赛)官方题解
- 第八届ACM趣味程序设计竞赛第四场(正式赛)A B C
- 电子科技大学第八届ACM趣味程序设计竞赛第二场题解
- 第八届ACM趣味程序设计竞赛第一场(热身赛)题解
- 山东省第五届ACM大学生程序设计竞赛-Hearthstone II(组合数学-第二类Stirling数)
- 2016河南省第九届ACM程序设计竞赛[正式赛四]
- 哈尔滨理工大学第五届ACM程序设计竞赛(热身)
- Circle(山东省第五届ACM大学生程序设计竞赛 )
- Android 4.4 Kit Kat 源码下载
- weblogic下面增加虚拟目录
- 跟着《算法导论》学习——快速排序
- eclipse中variable references non-existion resource可能原因及解决方案
- 深度学习:又一次推动AI梦想
- uestc 第五届ACM趣味程序设计竞赛第二场(正式赛)棋盘
- Fragment
- AKCMS常用标签集锦,记录下来以备回头找不到。
- 丢弃重口味的xml配置--spring4用groovy配置bean
- MYSQL基本操作(二)
- ubuntu编译内核
- 步步为营 .NET三层架构解析系列总结
- 僵尸进程,孤儿进程是如何产生
- KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释 [zz]