UESTC 757 棋盘 博弈、策略

棋盘

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit  Status

UDK和RU在一个白色的方格棋盘上玩游戏,棋盘有 N M 列,由 N×M 个小方格组成。两人轮流进行游戏,UDK先开始,然后是RU。在每一轮

游戏中,当前一方需要在棋盘上选择一个 1×k k×1 的全白矩形,并将里面的 k 个小格子全部染成黑色(每轮 k 的大小都可以由当前玩家自己决

定),将最后一个格子染色的一方获得游戏胜利。

现在假设两人都采取最佳的策略,给定棋盘大小,请问谁将获得胜利?

Input

数据的第一行是一个整数 T ( 0T10000 ),代表一共有 T 组测试数据。

接下来 T 行,每行由两个整数 N M 组成( 1N,M100 ),表示了每组数据中棋盘的大小。

Output

请严格输出 T 行,每行仅包括一个字符串UDK 或者 RU,代表每组测试数据对应的胜利一方的姓名。

Sample input and output

Sample Input Sample Output
2
1 2
2 2
UDK
RU

Hint

Sample Input中共有两组数据,其中第一组数据棋盘的大小是 1×2 ,即 1 2 列,UDK先手,可以直接选择涂 1×2 的矩阵,把棋盘完全染色从而

直接获得胜利。

请严格按照输出规则输出,行末不允许有多余的空格,最后一组数据行末同样需要换行。


My Solution

这个题目看上去是秒杀题,但合理转化并做对并不容易。
关键在于对“两人都采取最佳的策略”,UDK先开始就有了优先权,除非UDK实在没有办法比如全偶。

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int n,m,T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        if(!(n&1||m&1)) cout<<"RU"<<"\n";//有一个奇数,你先放中间,然后每次对面放什么,你就放什么(对称的放)。如果全偶数就没救了
        else cout<<"UDK"<<"\n";  //最后一组数据行末需要换行
    }
    return 0;
}


谢谢



你可能感兴趣的:(ACM,ICPC,OJ,uestc,博弈策略,思维题)