题解 Codeforces Round #814 (Div. 1/2)

本文详细解析了Codeforces Round #814 (Div. 1/2)的比赛题目,包括div2A的Chip Game,通过奇偶性分析先手必胜策略;div2B的Mathematical Circus,通过k对4取模分类讨论找到解法;div2C的Fighting Tournament,利用单调栈解决比赛胜负问题;以及更高难度的div1题目,如Burenka和Traditions的异或子序列优化,Fibonacci Strings的贪心选择等。
摘要由CSDN通过智能技术生成

题解 Codeforces Round #814 (Div. 1/2)

div2.

比赛链接

Solved Time Score
4/7 111min 3368

挥手。

div2A. Chip Game

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");
	}
}

div2B. Mathematical Circus

考虑对 k   m o d   4 k\bmod4 kmod4 的值分类讨论:

  • k   m o d   4 = 0 k\bmod4=0 kmod4=0,那么即 4 ∣ a b 4|ab 4∣ab,此时所有的奇数都要和 4 4 4 的倍数分类,而显然 [ 1 , n ] [1,n] [1,n] 的正整数中奇数要比 4 4 4 的倍数多,所以无解。
  • k   m o d   4 = 1 k\bmod4=1 kmod4=1,代码里写的是(3,1),(2,4),但实际上和 mod 3 一样就行。
  • k   m o d   4 = 2 k\bmod4=2 kmod4=2,每四个数为一组,类似 ( 2 , 1 ) , ( 3 , 4 ) (2,1),(3,4) (2,1),(3,4) 构造。
  • k   m o d   4 = 3 k\bmod4=3 kmod4=3,每两个数为一组,类似 ( 1 , 2 ) (1,2) (1,2) 构造。
#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);
		}
	}
}

div2C. Fighting Tournament

下文中的“它”指 a i a_i a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值