阅读程序(三) 13-18题 组合题 include include include include define ll long long int n, m; std::vector k, p; inline int mpow(int x, int k) { int ans = 1; for (; k; k = k >> 1, x = x * x) { if (k & 1) { ans = ans * x; } } return ans; } std::vector ans1, ans2; int cnt1, cnt2; inline void dfs(std::vector &ans, int &cnt, int l, int r, int v) { if (l > r) { ++cnt; ans.push_back(v); return; } for (int i = 1; i cntans1; int main() { scanf("%d%d", &n, &m); k.resize(n + 1); p.resize(n + 1); for (int i = 1; i > 1, 0); dfs(ans2, cnt2, (n >> 1) + 1, n, 0); std::sort(ans1.begin(), ans1.end()); int newcnt1 = 1; cntans1.push_back(1); for (int i = 1; i = 0; --i) { while (las < cnt1 && ans1[las] + ans2[i] < 0) { ++las; } if (las < cnt1 && ans1[las] + ans2[i] == 0) { ans += cntans1[las]; } } printf("%lld\n", ans); return 0; }
正确答案:判断题答案B。删除sort(ans2)会破坏指针扫描,影响输出,故错误。
试卷来源:2025 CSP-S提高级(第一轮)C++真题