div2.
Solved | Time | Score |
---|---|---|
4/7 | 111min | 3368 |
挥手。
div2A 放这种题?
设先手一步、后手一步为一轮。那么每一轮, x x x 坐标的增加值和 y y y 坐标的增加值都是偶数(奇数 + + + 奇数 = = = 偶数)。而起点的坐标为 ( 1 , 1 ) (1,1) (1,1),二数相加也是偶数。所以每一轮结束后的坐标 x + y x+y x+y 必定为偶数。所以若 n , m n,m n,m 奇偶不同,显然先手必胜。
否则后手有必胜策略,即使接下来的棋盘为正方形,然后仿照先手的走法换个方向走。
#define multiple_test_cases
int n, m;
void solve(){
n = rdi;
m = rdi;
if((n - m) & 1){
puts("Burenka");
} else {
puts("Tonya");
}
}
考虑对 k m o d 4 k\bmod4 kmod4 的值分类讨论:
#define multiple_test_cases
const int N = 2e5 + 10;
int n, k;
void solve(){
n = rdi;
k = rdi;
k %= 4;
if(k == 0){
puts("NO");
} else if(k == 1){
puts("YES");
if(n % 4 == 0){
for(int i = 1; i <= n; i += 4){
printf("%d %d\n%d %d\n", i+2, i, i+1, i+3);
}
} else {
n -= 2;
for(int i = 1; i <= n; i += 4){
printf("%d %d\n%d %d\n", i+2, i, i+1, i+3);
}
printf("%d %d\n", n+1, n+2);
}
} else if(k == 2){
puts("YES");
for(int i = 1; i <= n; i += 2){
if(((i-1)/2) & 1){
printf("%d %d\n", i, i+1);
} else {
printf("%d %d\n", i+1, i);
}
}
} else {
puts("YES");
for(int i = 1; i <= n; i += 2){
printf("%d %d\n", i, i+1);
}
}
}
下文中的“它”指 a i a_i a