VP Daiwa Securities Co. Ltd. Programming Contest 2024(AtCoder Beginner Contest 383)

news/2025/1/15 20:10:54/文章来源:https://www.cnblogs.com/maburb/p/18673668

A - Humidifier 1

题意:一个漏水的桶,在零时刻有零升水,进行\(n\)次加水,在\(t_i\)时刻加\(v_i\)升水,每一时刻会漏一生水,问第n次加水后有多少升水。

直接模拟即可,每次加水先减去漏掉的水,注意至少有0升,然后加上新加的水。

点击查看代码
void solve() {int n;std::cin >> n;int last = 0, sum = 0;for (int i = 0; i < n; ++ i) {int a, b;std::cin >> a >> b;sum = std::max(0, sum - (a - last));sum += b;last = a;}std::cout << sum << "\n";
}

B - Humidifier 2

题意:一个矩阵有墙有地板,你可以在两个地板上各放一个加湿器,加湿器会加湿距离他曼哈顿距离小于等于d的地板,你最多可以加湿多少地板。

直接枚举放在哪两个地板就行。

点击查看代码
void solve() {int n, m, d;std::cin >> n >> m >> d;std::vector<std::string> s(n);for (int i = 0; i < n; ++ i) {std::cin >> s[i];}   auto get = [&](int x, int y, int i, int j) -> bool {return std::abs(x - i) + std::abs(y - j) <= d;};int ans = 0;for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {if (s[i][j] == '#') {continue;}for (int x = 0; x < n; ++ x) {for (int y = 0; y < m; ++ y) {if (s[x][y] == '#') {continue;}int cnt = 0;for (int l = 0; l < n; ++ l) {for (int r = 0; r < m; ++ r) {if (s[l][r] == '.' && (get(i, j, l, r) || get(x, y, l, r))) {++ cnt;}}}ans = std::max(ans, cnt);}}}}std::cout << ans << "\n";
}

C - Humidifier 3

题意:一个矩阵有墙有地板有加湿器,加湿器会加湿最短距离距离他小于等于d的地板,但这个路径中不能穿墙,问可以加湿多少地板。

bfs。
先把所有加湿器入队,用个dist存每个格子最多可以走的步数,统计所有可以走到的地板。

点击查看代码
void solve() {int n, m, d;std::cin >> n >> m >> d;std::vector<std::string> s(n);for (int i = 0; i < n; ++ i) {std::cin >> s[i];}std::vector dist(n, std::vector<int>(m));std::queue<std::pair<int, int> > q;for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {if (s[i][j] == 'H') {dist[i][j] = d + 1;q.push({i, j});}}}const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};while (q.size()) {auto [x, y] = q.front(); q.pop();for (int i = 0; i < 4; ++ i) {int nx = x + dx[i], ny = y + dy[i];if (nx < 0 || nx >= n || ny < 0 || ny >= m || s[nx][ny] == '#' || dist[nx][ny] > dist[x][y] - 1) {continue;}dist[nx][ny] = dist[x][y] - 1;q.push({nx, ny});}}int ans = 0;for (int i = 0; i < n; ++ i) {for (int j = 0; j < m; ++ j) {if (s[i][j] != '#' && dist[i][j] > 0) {++ ans;}}}std::cout << ans << "\n";
}

D - 9 Divisors

题意:问有多少恰好有九个因子的小于等于n的数。

刚开始以为是爆搜。。。
我们知道一个数有多少因子跟它的质因子有关,于是我们手玩一会后发现只有两种形式的数满足,一个数等于 \(p_1^2\)\(p_2^2\)的数,一个是等于\(p_i^8\)的数。

于是我们筛出所有质数后,二分每个质数能匹配到的最大质数,再看有哪些一个就可以的。

点击查看代码
void solve() {i64 n;std::cin >> n;const int N = 2e6 + 5;std::vector<i64> primes;std::vector<int> st(N);for (int i = 2; i < N; ++ i) {if (!st[i]) {primes.push_back(i);}for (auto & p : primes) {if (p > N / i) {break;}st[p * i] = 1;if (i % p == 0) {break;}}}i64 ans = 0;for (int i = 0; i + 1 < primes.size(); ++ i) {int l = i + 1, r = (int)primes.size() - 1;while (l < r) {int mid = l + r + 1 >> 1;i64 x = primes[i], y = primes[mid];if ((__int128)x * x * y * y <= n) {l = mid;} else {r = mid - 1;}}i64 x = primes[i], y = primes[l];if ((__int128)x * x * y * y <= n) {ans += l - i;} else {break;}if ((__int128)x * x * x * x * x * x * x * x <= n) {++ ans;}}std::cout << ans << "\n";
}

题意:给你一个图和两个序列A和B,A中的数和B都不相同。 设\(f(u, v)\)是u到v中所有路径的最大边权中最小的。你可以打乱B的顺序,求最小的\(\sum_{i=1}^{k} f(A_i, B_i)\)

先阅读最小生成树和瓶颈生成树以及最小瓶颈路的概念:https://oi-wiki.org/graph/mst/#瓶颈生成树
那么我们知道\(f(u, v)\)对应的边肯定在最小生成树里,我们可以按照\(Kruskal\)算法的顺序从小到大加边,那么我们发现,当加入一条边\((u, v)\)时,在此之前还没找到瓶颈路径的两个点,如果正好在合并的这两个联通块里,那么这条边就是他们最小瓶颈边,于是贪心的尽可能匹配就行,存一下每个集合在\(A\)里有多少点和在\(B\)里有多少点。

点击查看代码
void solve() {int n, m, k;std::cin >> n >> m >> k;std::vector<std::array<int, 3> > edges(m);for (int i = 0; i < m; ++ i) {int u, v, w;std::cin >> u >> v >> w;-- u, -- v;edges[i] = {w, u, v};}std::sort(edges.begin(), edges.end());std::vector<int> fa(n), cnta(n), cntb(n);std::iota(fa.begin(), fa.end(), 0);for (int i = 0; i < k; ++ i) {int x;std::cin >> x;-- x;++ cnta[x];}for (int i = 0; i < k; ++ i) {int x;std::cin >> x;-- x;++ cntb[x];}std::function<int(int)> find = [&](int x) -> int {return x == fa[x] ? x : fa[x] = find(fa[x]);};i64 ans = 0;for (auto & [w, u, v] : edges) {u = find(u), v = find(v);if (u == v) {continue;}fa[v] = u;cnta[u] += cnta[v];cntb[u] += cntb[v];int min = std::min(cnta[u], cntb[u]);ans += (i64)min * w;cnta[u] -= min;cntb[u] -= min;}std::cout << ans << "\n";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869763.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

插头DP记录

关于插头dp。AAA黑题批发。 这个东西好像设问还挺广泛的,做到哪写到哪吧。 得先了解一下轮廓线dp定义。 概念 设问广泛但是总体来说是连通性相关状压dp的一类设计方法。 骨牌覆盖问题 比如说,最简单的,问你 \(n*m\) 的棋盘格里能放多少 \(1*2\) 的骨牌。 考虑把一个节点分为…

03_LaTeX之文档元素

在知道了如何输入文字后,在本章了解一个结构化的文档所依赖的各种元素——章节、目录、列表、图表、交叉引用、脚注等等。目录03_\(\LaTeX{}\) 之文档元素章节和目录章节标题目录文档结构的划分标题页交叉引用脚注和边注特殊环境列表对齐环境引用环境摘要环境代码环境表格列格…

THREE.js学习笔记6——Geometries

这一小节学习THREE.js中的物理模型。 什么是geometry?(英文解释,翻译为中文就看不懂了,直接看英语吧)Composed of vertices (point coordinates in 3D spaces)and faces (triangles that join those vertices to create a surface) Can be used for meshes but also for par…

第三节 回归实战

数据处理超参:人为指定不能改变测试数据只有x没有标签y 训练数据拆分,82开,作训练集和验证集(验证模型好坏),模型训练不是一路上升的过程,训练几次验证一次,最好的模型save下来 one-hot独热编码 猪(1 0 0) 狗(0 1 0) 猫(0 0 1) def get_feature_importance(feature_data, label…

Windows git bash 文字显示/斜杠开头数字

前言全局说明Windows git bash 文字显示/斜杠开头数字一、说明 详细介绍:https://zhuanlan.zhihu.com/p/133706032二、问题三、解决方法 git config --global core.quotepath false免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源: h…

DDR 带宽的计算与监控

DDR 带宽(Double Data Rate Bandwidth)是指 DDR 内存在一秒内可以传输的数据量,通常以 GB/s(Gigabytes per second) 为单位。它是衡量内存系统性能的重要指标,直接影响系统的数据吞吐能力。 1.如何计算 DDR 带宽 计算 DDR 理论带宽的公式为: DDR主频 * 位宽 = 理论带宽其…

1.15

尽力了,之前的粗心导致现在要改很多以前的坑,明天再继续

中考英语优秀范文-热点话题-传统文化-006 Welcome to Chinese Summer Camp 欢迎参加中国夏令营

1 写作要求 假定你是李华,你校今年暑假将为外国学生举办一场汉语夏令营活动(Chinese Summer Camp)。请你根据下面海报的内容,用英语给你的笔友David写一封电子邮件,介绍本次活动并邀请他参加。词数80左右。 Welcome to Chinese Summer Camp Time:July 18th—July 28th, 2…

机器人

本文来自博客园,作者:Traktorea,转载请注明原文链接:https://www.cnblogs.com/kdsmyhome/p/18673586

使用Nginx实现前端映射到公网IP后端内网不映射公网.250115

一、场景: 系统移动端需要映射到公网,但是后端地址不能映射出去 qbpm.xxxx.cn 系统解析内网IP qmbpm.xxxx.cn 移动端解析公网IP 二、思路: 移动端前端公网端口放出80 443端口 移动端后端映射到内网后端地址qbpm.xxxx.cn:8443 三、解决方法: vim nginx.confserver {listen 8…

Qml 中实现任意角为圆角的矩形

在 Qml 中,矩形(Rectangle)是最常用的元素之一。 然而,标准的矩形元素仅允许设置统一的圆角半径。 在实际开发中,我们经常需要更灵活的圆角设置,例如只对某些角进行圆角处理,或者设置不同角的圆角半径。 本文将介绍如何通过自定义 Qml 元素实现一个任意角可为圆角的矩形…

【附源码】JAVA在线投票系统源码+SpringBoot+VUE+前后端分离

学弟,学妹好,我是爱学习的学姐,今天带来一款优秀的项目:在线投票系统源码 。 本文介绍了系统功能与部署安装步骤,如果您有任何问题,也请联系学姐,偶现在是经验丰富的程序员! 一. 系统演示 系统测试截图系统视频演示https://githubs.xyz/show/340.mp4二. 系统概述【 系统…