前言
本文选取了洛谷上的几道典型题目,涵盖数学、图论、动态规划及贪心等核心算法。这些题目适合用于蓝桥杯及各类算法竞赛的备战练习,旨在通过具体案例巩固算法模板,提升解题思维。
本期重点涉及:
- 数学(快速幂取模)
- 构造(图论连通性)
- 01 背包(问题转化)
- 贪心算法
- DFS 暴搜 + 剪枝
- 模拟 + 小根堆维护最小值
精选题目解析
1. 转圈游戏
题目来源: P1965 [NOIP 2013 提高组] 转圈游戏
思路分析:
这是一个典型的循环移位问题。假设有 n 个数围成一圈,初始位置为 x,每次移动 m 步,共移动 k 次。最终位置的计算公式为:
(x + m * 10^k) % n
由于 k 的值可能非常大(例如 10^9),直接计算 10^k 会导致溢出,因此必须使用快速幂算法在计算过程中不断取模。同时,中间结果需要使用 long long 类型存储以防乘法溢出。
代码实现:
#include <iostream>
using namespace std;
typedef long long LL;
LL n, m, k, x;
// 快速幂函数:计算 (a^b) % p
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;
}
int main() {
cin >> n >> m >> k >> x;
// 计算最终位置
cout << (x + m * qpow(10, k, n)) % n << endl;
;
}


