其实这个游戏跟双方是否“绝顶聪明”无关,因为方案都是唯一的,只需要判断一下到底谁会赢就好了。

考虑分类讨论,类似整除分块的思路:

  • 每个数变成 kknk\lfloor\dfrac{n}{k}\rfloor
  • n[k0,k11]n \in [k ^ 0, k ^ 1 - 1]11
  • n[k1,k21]n \in [k ^ 1, k ^ 2 - 1]1+k1 + k
  • n[k2,k31]n \in [k ^ 2, k ^ 3 - 1]1+k+k21 + k + k ^ 2
  • \cdots
#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");
        }
    }
}