前言
这组题目选自洛谷,涵盖了多种经典算法模型,非常适合用于蓝桥杯备赛或日常算法训练。通过实际案例,我们可以更好地掌握从模板到具体解题的转化过程。
本期重点涉及以下技术点:数学(快速幂取模)、图论构造、01 背包问题转化、贪心算法、DFS 搜索加剪枝以及模拟配合小根堆维护最小值。
题目清单
1. 转圈游戏
题目: P1965 [NOIP 2013 提高组] 转圈游戏
解法:数学 + 快速幂
n 个数一圈(循环),计算 (x + m * 10^k) % n 的值即为移动后的位置。
由于 0 < k < 10^9,也就是 10 的 9 次方,非常大,需要用到可以取模的快速幂,一边乘一边取模。用 long long 来存。
代码:
#include <iostream>
using namespace std;
typedef long long LL;
LL n, m, k, x;
LL qpow(LL a, LL b, LL p) {
LL ret = 1;
while (b) {
if (b & 1) ret = ret * a % p;
b >>= 1;
a = a * a % p;
}
return ret;
}
{
cin >> n >> m >> k >> x;
cout << (x + m * (, k, n)) % n << endl;
;
}


