酷代码 AI
菜单
服务商

解决代码WA问题:修正相邻格子奇偶性计算逻辑

### 🐞代码问题分析 原代码在计算相邻格子奇偶性不同的情况数时存在逻辑错误。原代码简单地认为第二个格子及以后的格子都有 `m - (m / 2)` 种选择,这是不准确的。实际上,对于相邻格子奇偶性不同的情况,当第一个格子确定后,后续格子的选择取决于前一个格子的奇偶性。 ### 💡修正思路 可以分两种情况讨论: 1. 第一个格子填奇数,后续格子依次填偶数; 2. 第一个格子填偶数,后续格子依次填奇数。 分别计算这两种情况的方案数,然后将它们相加,得到相邻格子奇偶性不同的总方案数。 ### 📝修正后的代码 ```cpp #include <iostream> using namespace std; const int MOD = 100003; // 快速幂函数,用于计算 a^b % MOD long long quickPow(long long a, long long b) { long long res = 1; while (b > 0) { if (b & 1) { res = (res * a) % MOD; } a = (a * a) % MOD; b >>= 1; } return res; } int main() { int n, m; cin >> n >> m; // 总的填数情况数,每个格子有 m 种选择,共 n 个格子 long long total = quickPow(m, n); // 计算相邻格子奇偶性不同的情况数 long long odd = m / 2 + (m % 2); // 奇数的个数 long long even = m / 2; // 偶数的个数 // 分两种情况:第一个格子填奇数和第一个格子填偶数 long long oddEven1 = quickPow(odd, (n + 1) / 2) * quickPow(even, n / 2) % MOD; long long oddEven2 = quickPow(even, (n + 1) / 2) * quickPow(odd, n / 2) % MOD; long long oddEven = (oddEven1 + oddEven2) % MOD; // 存在相邻格子奇偶性相同的情况数 = 总的情况数 - 相邻格子奇偶性不同的情况数 long long ans = (total - oddEven + MOD) % MOD; cout << ans << endl; return 0; } ``` ### 🔍代码解释 1. **快速幂函数 `quickPow`**:用于计算 `a^b % MOD`,提高计算效率。 2. **总的填数情况数 `total`**:每个格子有 `m` 种选择,共 `n` 个格子,所以总的情况数为 `m^n`。 3. **相邻格子奇偶性不同的情况数 `oddEven`**: - 计算奇数的个数 `odd` 和偶数的个数 `even`。 - 分两种情况讨论:第一个格子填奇数和第一个格子填偶数,分别计算这两种情况的方案数 `oddEven1` 和 `oddEven2`。 - 将两种情况的方案数相加,得到相邻格子奇偶性不同的总方案数 `oddEven`。 4. **存在相邻格子奇偶性相同的情况数 `ans`**:用总的情况数减去相邻格子奇偶性不同的情况数,得到最终结果。 ######[AI问答 | 805点数解答 | 2026-05-16 20:06:30]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]