zoukankan      html  css  js  c++  java
  • Codeforces Gym

    I. Rock Piles
    time limit per test
    1.0 s
    memory limit per test
    256 MB
    input
    standard input
    output
    standard output

    Hasan and Abdullah are lost in the desert, they are waiting for the rescue squad to help them. While they are waiting, they decided to invent a new game called Rock Piles.

    In this game, there are two rock piles. The first pile contains N rocks, and the second one contains M rocks. Hasan and Abdullah take turns to play the game, Hasan starts first. In each turn, a player can choose to take one rock from a single pile, or take one rock from both piles. The player who cannot make any move, loses the game. Determine who will win if both of them play optimally.

    Input

    The first line of the input contains an integer T (1  ≤  T  ≤  104), where T is the number of the test cases.

    Each test case has one line that contains two integers N and M (0  ≤  NM  ≤  109), the number of rocks in the first and second pile respectively.

    Output

    For each test case, print a single line with the winner's name. If Hasan wins print "hasan", otherwise print "abdullah" (without quotes).

    Example
    input
    2
    2 3
    4 0
    output
    hasan
    abdullah

     威佐夫博弈的变形  变形了那跟原来的关系应该就不大了 在纸上写了几个状态没发现规律 只好SG函数打表

    打出表后规律一下就清楚了

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <iomanip>
    #include <math.h>
    #include <map>
    using namespace std;
    #define FIN     freopen("input.txt","r",stdin);
    #define FOUT    freopen("output.txt","w",stdout);
    #define INF     0x3f3f3f3f
    #define INFLL   0x3f3f3f3f3f3f3f
    #define lson    l,m,rt<<1
    #define rson    m+1,r,rt<<1|1
    typedef long long LL;
    typedef pair<int, int> PII;
    using namespace std;
    
    const int maxn = 10000 + 5;
    /*
    void GetSG(int n = 100, int m = 100) {
        int i, j;
        memset(SG, 0, sizeof(SG));
        for(i = 0; i <= n; i++) {
            for(int j = 0; j <= m; j++) {
                memset(Hash, 0, sizeof(Hash));
                if(i >= 1) Hash[SG[i - 1][j]] = 1;
                if(j >= 1) Hash[SG[i][j - 1]] = 1;
                if(i >= 1 && j >= 1) Hash[SG[i - 1][j - 1]] = 1;
                for(int k = 0; k <= n; k++) {
                    if(Hash[k] == 0) {
                         SG[i][j] = k;
                         break;
                    }
                }
            }
        }
    }
    */
    int main() {
        //FIN
        int n, m;
        int T;
        scanf("%d", &T);
        while(T--) {
            scanf("%d%d", &n, &m);
            if(n % 2 == 0 && m % 2 == 0) puts("abdullah");
            else puts("hasan");
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    抽象线程之Parallel类
    任务
    创建线程之Thread类和线程池
    创建线程之异步委托
    折半插入排序
    单链表的使用(插入,查找,删除,链表的倒置,删除相同结点)
    插入排序
    [Python]小甲鱼Python视频第034课(with else)课后题及参考解答
    [Python]小甲鱼Python视频第033课(except)课后题及参考解答
    [Python]小甲鱼Python视频第32课(except)课后题及参考解答
  • 原文地址:https://www.cnblogs.com/Hyouka/p/7445986.html
Copyright © 2011-2022 走看看