C++实现牛排队问题:计算满足条件的排队方法数
以下是解决该问题的C++代码: ```cpp #include <iostream> using namespace std; const int MOD = 1000000007; // 计算组合数 C(n, k) int combination(int n, int k) { if (k > n) return 0; if (k == 0 || k == n) return 1; int result = 1; for (int i = 1; i <= k; ++i) { result = 1LL * result * (n - i + 1) % MOD; result = 1LL * result * pow(i, MOD - 2, MOD) % MOD; } return result; } // 快速幂函数 int pow(int a, int b, int mod) { int res = 1; while (b) { if (b & 1) res = 1LL * res * a % mod; a = 1LL * a * a % mod; b >>= 1; } return res; } int main() { int n, k; cin >> n >> k; // 先放置 k 头公牛,需要 k - 1 头母牛隔开 // 那么剩余的母牛数量为 n - k - (k - 1) = n - 2 * k + 1 // 可以将问题转化为在 n - k + 1 个位置中选 k 个位置放公牛 int ans = combination(n - k + 1, k); cout << ans << endl; return 0; } ``` ### 代码解释: 1. **组合数计算**:`combination` 函数用于计算组合数 $C(n, k)$,使用了费马小定理来计算逆元,以处理取模运算。 2. **快速幂函数**:`pow` 函数用于快速计算 $a^b \bmod mod$。 3. **问题转化**:先放置 `k` 头公牛,需要 `k - 1` 头母牛隔开,那么剩余的母牛数量为 `n - k - (k - 1) = n - 2 * k + 1`。可以将问题转化为在 `n - k + 1` 个位置中选 `k` 个位置放公牛。 ### 复杂度分析: - 时间复杂度:$O(k \log MOD)$,主要是计算组合数和快速幂的时间。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 620点数解答 | 2026-05-31 15:51:49]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)401
- C++ 实现:根据给定正整数构造 3×3 方阵并计算满足条件的方案数(阿里通义 | 875点数解答 | 2024-11-13 16:38:24)272
- C++实现:低复杂度求解 3×3 方阵构造方案数(阿里通义 | 708点数解答 | 2024-11-13 16:45:15)308
- Python 高效解决 U 王国社区端午节粽子分配数量计算问题(DeepSeek | 218点数解答 | 2025-05-31 18:33:52)218
- C++ 实现:根据家庭人数精准计算 U 王国社区粽子分配总数(DeepSeek | 250点数解答 | 2025-05-31 18:36:11)189
- 幼儿园小朋友学号奇偶分类:代码实现与详细解释(字节豆包 | 406点数解答 | 2025-11-26 19:39:05)83
- 策略游戏大揭秘:小 L 与小 Q 最优策略下每轮得分计算全解析(字节豆包 | 676点数解答 | 2025-12-12 18:49:42)80
- Python代码:简化网友国度货币系统,求解最小货币种数(字节豆包 | 529点数解答 | 2025-12-13 10:29:25)69
- 数轴旅行:从原点出发,能否到达目标位置?(字节豆包 | 225点数解答 | 2026-01-23 19:51:03)72
- Python 实现:计算特殊规则矩阵行列式并对 109+7 取模(字节豆包 | 672点数解答 | 2026-02-05 20:46:07)92
- 舞蹈班排队难题:计算婷婷身高排名的C++解法 (字节豆包 | 281点数解答 | 2025-01-14 10:49:34)247
- 舞蹈班排队难题:根据身高算出婷婷前后排队位置(附C++代码)(字节豆包 | 263点数解答 | 2025-01-14 10:49:37)215