建议这题别开O2

P2822 [NOIP2016 提高组] 组合数问题

那是你写挂了,关 O2 什么事。 放代码。
by UnyieldingTrilobite @ 2024-02-25 15:04:57


@[Vorest](/user/37040) O2 优化正常情况不会改变代码行为,前后出现除了时间消耗以外的变化是代码自己的问题,比如数组越界,未定义行为等。
by zhangbo1000 @ 2024-02-25 15:07:16


@[Vorest](/user/37040) 为啥我开 O2 [过了](https://www.luogu.com.cn/record/148334949)?
by pyy1 @ 2024-02-25 15:07:20


```cpp #include <bits/stdc++.h> using namespace std; int n, m, t, k; int nums[2020][2020]; int nu[2020][2020]; int main() { cin >> t >> k; memset(nu,0,sizeof nu); memset(nums,0,sizeof nums); for (int i = 0; i <= 2000; i++) { for (int j = 0; j <= i; j++) { if (j == 0 || j == i) nums[i][j] = 1; else nums[i][j] = (nums[i - 1][j - 1] + nums[i - 1][j]) % k; nu[i][j] = nu[i - 1][j] + nu[i][j - 1] - nu[i - 1][j - 1]; if (nums[i][j] % k == 0) nu[i][j]++; } nu[i][i + 1] = nu[i][i]; //继承前缀和 } for (int i = 1; i <= t; i++) { cin >> n >> m; if (m >= n) m = n; cout << nu[n][m] << endl; } return 0; } ```
by Vorest @ 2024-02-25 15:14:30


@[UnyieldingTrilobite](/user/250637) 就是这样,评测样例出来是对的,关了也是对的
by Vorest @ 2024-02-25 15:15:20


@[UnyieldingTrilobite](/user/250637) ~~哈,金钩说话好霸气~~
by sapo1o @ 2024-02-25 15:16:23


@[Vorest](/user/37040) `nu[i][j] = nu[i - 1][j] + nu[i][j - 1] - nu[i - 1][j - 1];` i 或 j 为 0 时访问到下标负一。
by UnyieldingTrilobite @ 2024-02-25 15:16:56


@[Vorest](/user/37040) 如果i-1是-1怎么办
by sapo1o @ 2024-02-25 15:17:04


@[sapo1o](/user/997236) 因为老典了……隔几天就能看到有人警示后人不要开 O2 的,一看全是代码挂了。
by UnyieldingTrilobite @ 2024-02-25 15:17:59


@[UnyieldingTrilobite](/user/250637) 不知道为什么不是RE
by sapo1o @ 2024-02-25 15:19:03


| 下一页