题解 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的贪心选择等。

题解 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 ai

考虑三种情况:

  • 如果 a i a_i a
Codeforces Round 1036 是一场同时面向 Div.1Div.2 参赛者的比赛,通常这类比赛会包含多个具有挑战性的编程题目,涵盖算法、数据结构、数学等多个领域。比赛的题解和题目信息可以帮助参赛者回顾解题思路,提升编程能力。 ### 比赛基本信息 - **比赛名称**:Codeforces Round #1036 (Div. 1 and Div. 2) - **比赛时间**:具体时间为 UTC+X(根据实际举办日期和时间表) - **比赛链接**:[Codeforces 官方页面](https://codeforces.com/contest/1343) - **题解发布位置**:通常在比赛结束后不久,官方或社区成员会在 Codeforces 博客、GitHub 或其他技术平台上发布题解### 题目类型与难度分布 该轮比赛通常包括 5 到 7 道题目,难度从简单实现到复杂算法不等。例如: - **A题**:通常是简单的模拟或数学问题。 - **B题**:可能涉及字符串处理或基础贪心策略。 - **C题**:中等难度,可能需要掌握基本的数据结构如数组、排序等。 - **D题及以后**:较高难度,可能涉及图论、动态规划、数论等高级算法### 参赛情况与亮点 - **参与人数**:通常超过 10,000 名选手参加。 - **热门话题**:比赛中某些题目可能会引发广泛讨论,尤其是那些需要用到巧妙构造或优化技巧的问题。 - **知名选手表现**:顶尖选手如 tourist、Um_nik 等通常会以极快的速度完成所有题目,并占据排行榜前列。 ### 示例代码片段 以下是一个典型的 Codeforces 题目解法示例,适用于某道中等难度题目: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while(t--) { long long l, r; cin >> l >> r; // 假设 e 是一个预处理好的符合条件的数组 // 使用二分查找来统计区间 [l, r] 内的有效数字个数 long long ans = upper_bound(e.begin(), e.end(), r) - lower_bound(e.begin(), e.end(), l); cout << ans << endl; } return 0; } ``` ### 题解资源推荐 - **Codeforces 官方博客**:通常会有详细的题解和作者说明。 - **GitHub 仓库**:许多参赛者会将自己的解法上传至 GitHub,便于他人学习。 - **知乎专栏 / 优快云 / 博客园**:中文社区中也常有高质量的赛后总结与分析文章。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值