VP Educational Codeforces Round 36 (Rated for Div. 2)

news/2025/3/18 5:14:36/文章来源:https://www.cnblogs.com/maburb/p/18778119

A. Garden

题意:\(n\)个数里选一个\(k\)的因子,使得\(\frac{k}{a_i}\)最小。

点击查看代码
void solve() {int n, k;std::cin >> n >> k;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}int ans = k;for (int i = 0; i < n; ++ i) {if (k % a[i] == 0) {ans = std::min(ans, k / a[i]);}}std::cout << ans << "\n";
}

B. Browser

题意:你要把\([1, l - 1]\)\([r + 1, n]\)删除,你在\(pos\),需要移动到\(l\)\(r\)。使得移动距离最小。

分类讨论,如果\(l=1, r=n\),则无需操作。如果\(l=1\)则只要移动到\(r\),如果\(r=n\)只要移动到\(l\)。否则就看从\(l\)再到\(r\)距离小还是从\(r\)\(l\)距离小。

点击查看代码
void solve() {int n, p, l, r;std::cin >> n >> p >> l >> r;if (l == 1 && r == n) {std::cout << 0 << "\n";} else if (l == 1) {std::cout << std::abs(r - p) + 1 << "\n";} else if (r == n) {std::cout << std::abs(p - l) + 1 << "\n";} else {std::cout << std::min(std::abs(p - l) + 1 + r - l + 1, std::abs(r - p) + 1 + r - l + 1) << "\n";}
}

C. Permute Digits

题意:给你两个数字\(a, b\),重排\(a\)使得\(a\)小于等于\(b\)且最大。

如果\(b\)的位数比\(a\)多则直接从大到小排序输出。
否则贪心放能放的最大的,然后如果当前放的等于\(b\)的这一位,则可以找一个小于这一位的放当前位置,然后后面的从大到小放,然后继续枚举。否则当前位小于\(b\),则后面直接从大到小放。

点击查看代码
void solve() {std::string s, t;std::cin >> s >> t;std::sort(s.begin(), s.end(), std::greater<char>());if (t.size() > s.size()) {std::cout << s << "\n";} else {std::string pre, ans;for (auto & c : t) {int n = s.size();int p = -1;for (int i = 0; i < n; ++ i) {if (s[i] <= c) {p = i;break;}}if (p == -1) {break;}int p1 = -1;for (int i = p; i < n; ++ i) {if (s[i] < c) {p1 = i;break;}}if (p1 != -1) {ans = std::max(ans, pre + s[p1] + s.substr(0, p1) + s.substr(p1 + 1));  }  		pre += s[p];if (s[p] < c) {ans = std::max(ans, pre + s.substr(0, p) + s.substr(p + 1));break;}s.erase(s.begin() + p);}if (pre.size() == t.size()) {ans = pre;}std::cout << ans << "\n";}
}

D. Almost Acyclic Graph

题意:给你一个有向图,问能不能只删掉一条边使得图变成有向无环图。

考虑拓扑排序,如果我们枚举删去边,然后拓扑排序判有没有环,会超时。转换思路,删去一条边相当于把一个点入度减少1,那么可以枚举减少度数的点。

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::vector<std::vector<int>> adj(n);std::vector<int> in(n);for (int i = 0; i < m; ++ i) {int u, v;std::cin >> u >> v;-- u, -- v;++ in[v];adj[u].push_back(v);}auto t = in;for (int i = 0; i < n; ++ i) {-- in[i];std::queue<int> q;for (int u = 0; u < n; ++ u) {if (in[u] == 0) {q.push(u);}}int cnt = 0;while (q.size()) {++ cnt;int u = q.front(); q.pop();for (auto & v : adj[u]) {if ( -- in[v] == 0) {q.push(v);}}}if (cnt == n) {std::cout << "YES\n";return;}in = t;}std::cout << "NO\n";
}

E. Physical Education Lessons

题意:一开始有\(n\)个1,两种操作,一个是把\([l, r]\)变成\(0\),一个是把\([l, r]\)变成\(1\),每次操作问1有多少。

明显是线段树,如果离散化处理比较麻烦,考虑动态开点。

点击查看代码
#define ls(u) tr[u].lson
#define rs(u) tr[u].rsonconst int N = 3e5 + 5;struct Node {int lson, rson;int sum;int set;
}tr[N * 55];int idx = 0;void pushup(int u) {tr[u].sum = tr[ls(u)].sum + tr[rs(u)].sum;
}void pushdownNode(int & u, int len, int set) {if (!u) {u = ++ idx;}tr[u].sum = len * (set - 1);tr[u].set = set;
}void pushdown(int u, int l, int r) {if (tr[u].set != 0) {int mid = l + r >> 1;pushdownNode(ls(u), mid - l + 1, tr[u].set);pushdownNode(rs(u), r - mid, tr[u].set);tr[u].set = 0;}
}void modify(int & u, int l, int r, int L, int R, int v) {if (!u) {u = ++ idx;}if (L <= l && r <= R) {pushdownNode(u, r - l + 1, v);return;}pushdown(u, l, r);int mid = l + r >> 1;if (L <= mid) {modify(ls(u), l, mid, L, R, v);}if (R > mid) {modify(rs(u), mid + 1, r, L, R, v);}pushup(u);
}void solve() {int n, q;std::cin >> n >> q;int root = 0;modify(root, 1, n, 1, n, 2);while (q -- ) {int l, r, k;std::cin >> l >> r >> k;modify(root, 1, n, l, r, k);std::cout << tr[root].sum << "\n";}
}

F. Imbalance Value of a Tree

题意:给你一棵树,每个点有点权,求所有路径的最大值减最小值的和。

考虑拆分来做,也就是看每个点作为最大值出现几次,以及作为最小值出现几次。
考虑把边权变为两个点的最大值,然后按最小生成树来做,加入当前边,想要让这个边是最大值,那么它连接的两个联通块各选一个点就行了。
最小值同样的求法。

点击查看代码
struct DSU {std::vector<int> fa, cnt;DSU(int _n) {init(_n);}void init(int _n) {fa.assign(_n, 0);cnt.assign(_n, 1);std::iota(fa.begin(), fa.end(), 0);}int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}bool merge(int x, int y) {x = find(x), y = find(y);if (x == y) {return false;}fa[y] = x;cnt[x] += cnt[y];return true;}bool same(int x, int y) {return find(x) == find(y);}int size(int x) {return cnt[find(x)];}
};void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}std::vector<std::array<int, 3>> edges(n - 1);for (int i = 0; i + 1 < n; ++ i) {int u, v;std::cin >> u >> v;-- u, -- v;edges[i] = {std::max(a[u], a[v]), u, v};}std::sort(edges.begin(), edges.end());i64 ans = 0;DSU d(n);for (auto & [w, u, v] : edges) {ans += (i64)w * d.size(u) * d.size(v);d.merge(u, v);}for (auto & [w, u, v] : edges) {w = std::min(a[u], a[v]);}std::sort(edges.begin(), edges.end(), std::greater<>());d.init(n);for (auto & [w, u, v] : edges) {ans -= (i64)w * d.size(u) * d.size(v);d.merge(u, v);}std::cout << ans << "\n";
}

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

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

相关文章

ROCm技术小结与回顾(下)

示例3–V_MFMA_F64_4x4x4F64 考虑V_MFMA_F64_4x4x4F64指令,它计算大小为44的四个独立矩阵块的MFMA。执行的操作是 ,其中 , , 和 都是大小为44元素的矩阵,N=0,1,2,3。下面的两张图显示了 1)输入参数A和B的四个分量的大小和形状,如图4-18所示。 2)分量映射到波阵面所拥有…

ROCm技术小结与回顾(上)

ROCm技术小结与回顾 在这一部分中,首先检查了Kernel 5在各种AMD GPU和问题大小上的性能,并注意到当网格超过一定大小阈值时,性能似乎会急剧下降。通过实验确定,LLC的大小是大型xy平面问题性能的限制因素。提出了两种不同的解决方法来规避缓存大小的问题,这两种方法都只需要…

有限差分法——拉普拉斯第4部分

有限差分法——拉普拉斯第4部分 提出了拉普拉斯算子有限差分法的HIP实现,并应用了四种不同的优化。在这些代码修改过程中,观察到由于全局内存的总取数减少,性能得到了逐步提高。然后,应用了进一步的优化,以在512512512上达到预期的性能目标MI250X GPU的单个GCD上的512个点…

推荐几本书1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

WebKit Inside: CSS 的匹配原理

WebKit Inside: CSS 的匹配原理相关文章WebKit Inside: CSS 样式表的解析 WebKit Inside: CSS 样式表的匹配时机 WebKit Inside: Acitvie 样式表 当WebView解析完所有外部与内联样式表,就要进入到CSS样式表的匹配阶段。 1 相关类图 WebKit中参与CSS样式表匹配的主要类如下图所…

助记词-公私钥-子私钥派生-钱包地址原理及实现

0x01.简介 现在各种DEX、钱包插件中的钱包导入及创建,大部分是通过助记词来备份的; 助记词是明文私钥的一种表现形式,最早由BIP39提出,为了帮助用户记住复杂的私钥; 一组助记词可以生成各个链上的公私钥,进而可以算出钱包地址;掌握了助记词,就代表掌握了该组助记词上的…

AI 代理的未来是事件驱动的

AI 代理即将彻底改变企业运营,它们具备自主解决问题的能力、适应性工作流以及可扩展性。但真正的挑战并不是构建更好的模型。 代理需要访问数据、工具,并且能够在不同系统之间共享信息,其输出还需要能被多个服务(包括其他代理)使用。这不是一个 AI 问题,而是一个基础设施…

树莓派 3B + Bookworm:mjpg-streamer 正确安装全流程(原创)

在树莓派 OS Bookworm 版本上安装 mjpg-streamer 并非像旧版本一样简单,许多网上的教程已经过时,甚至存在错误。我在尝试过程中遇到了多个问题,例如依赖库缺失、编译失败等,但最终成功解决并搭建了 远程视频流监控系统。本教程基于 树莓派 3B,整理了一套 完整、可复现 的 …

1.匀速圆周运动

1.平面中的匀速圆周运动 例子:一个物体在半径为r的圆形路径中以恒定大小的速度s移动。 建立一个二维坐标系,物体位于平面上,圆心在原点上。物体的瞬时速度v(t)总是与其运动轨迹相切,所以物体任意时刻的速度与轨迹圆相切,并且速度的大小:$|v(t)|=s$ 下图右侧的两个三角形,…

Fiddler如何抓取HTTPS请求

如果发现fiddler只能抓取http请求,但是抓取不到HTTPS请求,看查看是不是没有勾选解密https流量入口:Tools——>Options——>HTTPS,勾选以下选框设置完成过后可以正常抓取HTTPS的请求了

愿景2025|未来已来 各地未来产业加速布局

各地2025年政府工作报告显示,从东部沿海到中西部内陆,从人工智能到低空经济,从量子科技到生物制造,新兴产业和未来产业的布局正在加速展开,这些产业不仅成为各地抢占发展新赛道的重要抓手,更是推动经济高质量发展的新增长极。