博弈

  • 题目链接:博弈
  • 如果没有权限看题,请看下图

  • 题目思路:通过手玩样例,我们可以得出一些结论:
    1. 如果k==1,那么可以不断地删数,即为平局。
    2. 我们可以把区间内的每个数判断一下,看能用几次k把那个数弄为0,把次数累加,最后发现,胜利结果与总次数的奇偶性有关。
  • 代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define gc getchar()
    #define ll long long
    using namespace std;
    int l,r,k;
    ll tot;
    int main() {
    while(scanf("%d%d%d",&l,&r,&k)!=EOF) {
    if(k==1) {
    printf("Draw\n");
    continue;
    }
    tot=0;
    for(int i=l; i<=r; i++) {
    ll time=1;
    while(time<=i) {
    tot+=time;
    time*=k;
    }
    tot&=1;
    }
    // cout<<tot<<endl;
    if(!(tot&1)) {
    printf("Cwbc\n");
    }
    else {
    printf("XHRlyb\n");
    }
    }
    return 0;
    }
rp++