1. 2022 ICPC浙江省赛部分题解:从数学思维到图论应用
作为一名参加过多次ICPC区域赛的老队员,我深知在VP训练中复盘真题的重要性。这次我们团队一起做了2022年浙江省赛的部分题目,发现其中既有考验数学思维的妙题,也有考察基础算法应用的经典题型。下面我将分享其中几道典型题目的解题思路和实现细节,希望能给正在备赛的同学们一些启发。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. A题:JB Loves Math - 数学思维与分类讨论
2.1 题目核心分析
这道题要求我们通过最少的操作次数将整数a变为b,操作限定为两种:
- 加上一个奇数x
- 减去一个偶数y
乍看简单,但需要仔细分析所有可能的情况。关键在于理解奇偶性变化规律和操作的最优组合方式。
2.2 解题思路拆解
我们首先计算差值d = b - a,然后分三种情况讨论:
- d == 0:无需操作,直接返回0
- d > 0(需要增加):
- d为奇数:1次操作(直接加这个奇数)
- d为偶数:
- 如果d/2为奇数:2次操作(如加两次d/2)
- 如果d/2为偶数:3次操作(需要组合加减操作)
- d < 0(需要减少):
- |d|为偶数:1次操作(直接减这个偶数)
- |d|为奇数:2次操作(需要先加一个奇数使差值为偶数)
注意:这里的分类讨论基于一个关键观察——奇数只能通过加法获得,而减法只能处理偶数差值。
2.3 代码实现与优化
cpp复制void solve() {
int a,b;
cin>>a>>b;
int d = b - a;
if (d == 0) cout << "0\n";
else if (d > 0) {
if (d % 2 == 1) cout << "1\n";
else {
int half = d / 2;
if (half % 2 == 1) cout << "2\n";
else cout << "3\n";
}
} else {
d = -d;
if (d % 2 =
