第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(沈阳)补题记录
2021/8/7 14:36:00
本文主要是介绍第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(沈阳)补题记录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
比赛链接:Here
很可惜,如果再强一点,就可以拿牌子了。
5道即可金牌尾 or 银首
F. Kobolds and Catacombs (思维)
真不难,只是理解错了题意
如果原数组 \(a\) 和 排序后的数组 \(b\) 在某个位置前缀和相同和可以划分为一组
const int N = 1e6 + 10; ll a[N], b[N]; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n; cin >> n; for (int i = 1 ; i <= n; ++i) cin >> a[i], b[i] = a[i]; sort(a + 1, a + 1 + n); ll sa = 0, sb = 0, cnt = 0; for (int i = 1; i <= n; ++i) { sa += a[i], sb += b[i]; if (sa == sb) cnt ++; } cout << cnt; }
G. The Witchwood (签到)
递减排序然后累加前 \(k\) 个即可
H. The Boomsday Project
淦,很考验细节处理的单调队列优化DP,当初没学过,不知道怎么处理
const int N = 5e2 + 10; int d[N], k[N], c[N]; struct Node {int p, q;} node[100005]; bool cmp(Node a, Node b) {return a.p < b.p;} int t[100005 * 3]; //第几次是在第几天 ll dp[100005 * 3]; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m, r; cin >> n >> m >> r; for (int i = 1; i <= n; ++i) cin >> d[i] >> k[i] >> c[i]; int w = 0; for (int i = 1; i <= m; ++i) cin >> node[i].p >> node[i].q; sort(node + 1, node + 1 + m, cmp); for (int i = 1; i <= m; ++i) { for (int j = 1; j <= node[i].q; ++j) t[w + j] = node[i].p; w += node[i].q; } t[0] = t[1]; dp[0] = 0; for (int i = 1; i <= w; ++i) dp[i] = dp[i - 1] + r; deque<int>q[n + 1]; for (int i = 1; i <= n; ++i) q[i].push_back(0); for (int i = 1; i <= w; ++i) { for (int j = 1; j <= n; ++j) { while (!q[j].empty() and (t[i] - t[q[j].front() + 1] >= d[j] || i - q[j].front() > k[j])) q[j].pop_front(); dp[i] = min(dp[i], dp[q[j].front()] + c[j]); } for (int j = 1; j <= n; ++j) { while (!q[j].empty() and dp[i] <= dp[q[j].back()]) q[j].pop_back(); q[j].push_back(i); } } cout << dp[w] << '\n'; }
I. Rise of Shadows
int main() { cin.tie(nullptr)->sync_with_stdio(false); ll h, m, a; cin >> h >> m >> a; ll d = __gcd(h - 1, m); cout << min(d * (2 * (a / d) + 1), h * m); }
K . Scholomance Academy
真 · 阅读理解题
int main() { cin.tie(nullptr)->sync_with_stdio(false); int n; cin >> n; int s1 = 0, s2 = 0; vector<int>v1, v2; for (int i = 1; i <= n; ++i) { char c; int x; cin >> c >> x; if (c == '+') s1++, v1.push_back(x); else s2++, v2.push_back(x); } sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); double ans = 0; for (int i = 0; i < s1; ++i) { ans += lower_bound(v2.begin(), v2.end(), v1[i]) - v2.begin(); } ans = ans / s1 / s2; cout << fixed << setprecision(10) << ans; }
这篇关于第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(沈阳)补题记录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27文件掩码什么意思?-icode9专业技术文章分享
- 2024-12-27如何使用循环来处理多个订单的退款请求,代码怎么写?-icode9专业技术文章分享
- 2024-12-27VSCode 在编辑时切换到另一个文件后再切回来如何保持在原来的位置?-icode9专业技术文章分享
- 2024-12-27Sealos Devbox 基础教程:使用 Cursor 从零开发一个 One API 替代品 审核中
- 2024-12-27TypeScript面试真题解析与实战指南
- 2024-12-27TypeScript大厂面试真题详解与解析
- 2024-12-26怎么使用nsenter命令进入容器?-icode9专业技术文章分享
- 2024-12-26导入文件提示存在乱码,请确定使用的是UTF-8编码怎么解决?-icode9专业技术文章分享
- 2024-12-26csv文件怎么设置编码?-icode9专业技术文章分享
- 2024-12-25TypeScript基础知识详解