其实这个游戏跟双方是否“绝顶聪明”无关,因为方案都是唯一的,只需要判断一下到底谁会赢就好了。
考虑分类讨论,类似整除分块的思路:
- 每个数变成 个
- 当 , 次
- 当 , 次
- 当 , 次
#include<cstdio>
#define int long long
int init(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
void print(int x){
if (x < 0) x = -x, putchar('-');
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
int l, r, k;
int calc(int n){
/* 每个数变成 k 个 floor(n / k) */
/* 当 n \in [k ^ 0, k ^ 1 - 1],1 次 */
/* 当 n \in [k ^ 1, k ^ 2 - 1],1 + k 次 */
/* 当 n \in [k ^ 2, k ^ 3 - 1],1 + k + k ^ 2 次 */
int i, l, r, ans = 0;
for (i = l = 1, r = k - 1; r <= n; i = i * k + 1, l *= k, r = r * k + k - 1)
ans += i * (r - l + 1);
return ans + i * (n - l + 1);
}
signed main(){
while (scanf("%d%d%d", &l, &r, &k) != EOF) {
if (k == 1) puts("Draw");
else {
int ans = calc(r) - calc(l - 1);
puts((ans & 1) ? "XHRlyb" : "Cwbc");
}
}
}