Codeforces Round#697 (Div. 3)

💡 原文中文,约6300字,阅读约需15分钟。
📝

内容提要

Codeforces Round#697 (Div. 3)的题目包括多个算法问题:A题判断整数是否有不为1的奇因子,B题考察2020和2021的组合,C题选择不冲突的组合,D题优化物品选择以满足价值,E题求取最大和的组合数,F题判断两个矩阵是否可通过翻转相同,G题要求删除数字以满足模条件。

🔎

延伸解读

从题目分布看 Div.3 的难度梯度

本场 Div.3 的七道题覆盖了数论、组合计数、贪心枚举、矩阵操作和动态规划等常见入门考点。A、B 两题侧重基础数学观察,C、E 涉及组合计数与容斥,D 需要排序加二分枚举,F 考察异或性质,G 则用类似素数筛的 DP 处理整除关系。整体难度递进明显,适合作为赛后补题和知识点查漏的参考。

D 题爆 int 的教训与数据范围意识

作者提到 D 题因爆 int 被卡,这提醒我们在累加求和或计算组合数时,要提前估算中间结果是否超出 32 位整型范围。本题中代价为 1 或 2 的物品价值累加后可能很大,使用 long long 或开题时直接宏定义 int 为 long long 是常见做法。养成先看数据范围再选类型的习惯,能避免不必要的罚时。

G 题为何容易在赛时卡住

G 题要求删除最少数字使任意两数满足大数模小数为零,本质是求最长可保留子序列。作者赛时未能想出,说明这类“筛法式 DP”需要一定的模型识别能力:把每个数看作可被其倍数转移的状态,用类似埃氏筛的枚举方式更新 dp。若平时缺少对整除关系与 DP 结合的练习,赛时容易陷入暴力或贪心的误区。

❓

Q&A

Codeforces Round#697 (Div. 3)的A题主要考察什么内容?

A题主要考察判断一个整数是否存在不为1的奇因子,解法是排查所有2的幂次。

B题的解法是什么?

B题的解法是检查一个数除以2020的商是否大于等于余数,以判断是否可以由n个2020和m个2021相加得到。

C题如何选择不冲突的组合?

C题使用容斥原理计算可选组合数,以确保选择的组合不冲突。

D题的主要目标是什么?

D题的主要目标是在代价最小的情况下选择物品以满足所需的价值。

E题如何计算最大和的组合数?

E题通过计算组合数来确定从数据中取出k个数使其和最大的方法。

F题判断两个矩阵是否相同的关键是什么?

F题的关键是检查相邻行或列的异或结果,以判断能否通过翻转行或列将两个矩阵变为相同。

🏷️

标签

➡️

继续阅读