【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
比赛链接本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18799072
开题 + 补题情况
和前三场比起来前期的签到题发挥稳定了许多,没有被卡很久,不过 1001 还是因为自己读错题挂了三发,不太应该。
虽然 rank 比之前有提升了,但是还是没有开出除了签到题之外的题,开的题价值不大,自己能力的提升还任重道远啊。
1006 - 进步
第一题就开的这个题。
此题涉及到修改某一天的进步量,查询某个时间区间的进步量,所以是单点修改,区间查询,很容易想到使用树状数组来维护。
点击查看代码#include #define inf32 1e9#define inf64 2e18#define ls o > n >> q; std::vector a(n + 1); for(int i = 1;i > a; } BIT t(n + 1); for(int i = 1;i > op; if(op == 1) { int x, y;std::cin >> x >> y; t.add(x, y - a); a = y; } else { sum ++; int l, r;std::cin >> l >> r; i64 e = t.query(r); i64 s = t.query(l - 1); e = e / 100; s = s / 100; ans ^= ((e - s) * sum); } } std::coutk; std::vector a(n, std::vector(k)); auto dp = a; for(auto &i : a) { for(auto &j : i) { std::cin >> j; } } for(int j = 0;j < k;j ++) { dp = a; if(j > 0)dp = std::max(dp, dp); } for(int i = 1;i < n;i ++) { for(int j = 0;j < k;j ++) { dp = dp + a; } for(int j = 1;j < k;j ++) { dp = std::max(dp, dp); } } std::coutn >> k; std::vector dazhe; std::vector jian; for(int i = 1;i > op; i64 v;std::cin >> v; if(op == 0) { dazhe.push_back(1.0 * v / 10); } else { jian.push_back(v); } } sort(dazhe.begin(), dazhe.end()); sort(jian.begin(), jian.end(), std::greater()); for(int i = 1;i < dazhe.size();i ++) { dazhe *= dazhe; } for(int i = 1;i < jian.size();i ++) { jian += jian; } double ans = p; for(int i = 0;idazhe.size() || j > jian.size())continue; double tmp = p; if(d > u >> k >> h; std::vector a(n + 1); std::priority_queue pq; std::priority_queue sha; for(int i = 1;i > g >> x; a = x; pq.push({i, g, x, 0}); sha.push({i, g}); } int ans = 0; while(h && pq.size()) { monster now = pq.top(); pq.pop(); if(now.cnt)now.x -= u / 2; else now.x -= u; now.cnt ++; now.x = std::max(0, now.x); a = now.x; if(now.x && now.cnt < k)pq.push(now); if(!now.x)ans ++; while(sha.size() && a == 0) { sha.pop(); } if(sha.size()) { h -= sha.top().g; h = std::max(h, 0); } } std::couta; } int ans = 0; auto dfs = [&](auto &&self, int st, int pre, int gcd) -> void { if(st != 1)gcd = std::gcd(gcd, abs(a - a)); if(g.size() == 0) { ans += ((gcd & (gcd - 1)) == 0); return; } for(auto &i : g) { self(self, i, st, gcd); } }; dfs(dfs, 1, 0, 0); std::coutb >> c >> v; i64 l = 0, r = ((1lli64 { while(s + 1 != e) { i64 mid = (s + e) >> 1; if((k * mid + b) >> bit & 1) e = mid; else s = mid; } return s; }; i64 ans = 0; for(int i = 61;i >= 0;i --) { if(l > r)break; i64 m = bs(l - 1, r + 1, i); int nowc = (c >> i & 1); int nowv = (v >> i & 1); if(nowv == 1) { if(nowc == 1) { ans += r - m; r = m; } else { ans += m - l + 1; l = m + 1; } } else { if(nowc == 1) { l = m + 1; } else { r = m; } } } if(l > n >> c; std::vector a(n + 1); for(int i = 1;i > a; } int m;std::cin >> m; std::vector g(c + 1), h(c + 1); for(int i = 1;i > u >> v; g.push_back(v); if(u != v)g.push_back(u); } int k = sqrtl(m); std::vector vis(c + 1); for(int i = 1;i = k) { vis = true; for(auto &j : g) { h.push_back(i); } } } std::vector dat(c + 1), sum(c + 1); for(int i = 1;iyb)std::swap(xb, yb); std::cout
页:
[1]