当前位置: 首页 > news >正文

2025/9/25 模拟赛总结

招笑。

A. prime

image

显然 \(v(i)u(i)\) 是若干个升序的连续段,而连续的数量为 \(u(i)-v(i)\)。于是不难想到小学奥数裂项相消,即 \(\frac{y-x}{xy}=\frac{1}{x}-\frac{1}{y}\),然后连续的 \(-+-+\) 抵消掉,只剩下首尾两项

我们可以找出 \(n\) 左边和右边的第一个质数 \(x,y\),前面所有的可以一起算出来,剩下的 \(u(i),v(i)\) 就是 \(x,y\),直接计算即可。

赛时怕 \(O(\sqrt{n})\) 判质数会爆炸,所以写了 \(\text{Miller-Rabin}\)。但是根号严重跑不满

然后就把左右质数的 \((n,n+1)\) 写成了 \((n-1,n)\)

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using LL = __int128_t;const int kMaxN = 2e5 + 5;
const LL kP = 1e9 + 7;LL T = 1, n, a[kMaxN], ans, p, q = 1, g, tmp, x, y, pr[20] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
long long in;LL P(LL x, LL y, LL P, LL ret = 1) {for (; y; (y & 1) && ((ret *= x) %= P), (x *= x) %= P, y >>= 1) {}return ret;
}
bool chk(LL n, LL a, LL b, LL x, LL v = 0, LL j = 1) {if ((v = P(x, a, n)) == 1) return 1;for (; j <= b; v = (__int128_t)v * v % n, j++) {if (v == n - 1) {break;}}return j <= b;
}
bool C(LL n, LL a = 0, LL b = 0) {if (n < 3 || n % 2 == 0) {return n == 2;}if (n > 37) {for (a = n - 1, b = 0; a % 2 == 0; a >>= 1, b++) {}for (int i = 1; i <= 12; i++) {if (!chk(n, a, b, pr[i])) {return 0;}}return 1;} else {for (int i = 1; i <= 12; i++) {if (n == pr[i]) {return 1;}}return 0;}
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);freopen("prime.in", "r", stdin), freopen("prime.out", "w", stdout);for (cin >> in, T = in; T; T--, ans = 0) {cin >> in, n = in;if (n == 2 || n == 3) {cout << (n == 2 ? "1/6" : "7/30") << '\n';continue;}for (int i = n;; i--) {if (C(i)) {x = i;break;}}for (int i = n + 1;; i++) {if (C(i)) {y = i;break;}}q = 2 * x, p = x - 2, g = __gcd(p, q), p /= g, q /= g;tmp = x, x = n - x + 1, y = tmp * y, g = __gcd(x, y), x /= g, y /= g;p = p * y + q * x, q = q * y, g = __gcd(p, q), p /= g, q /= g;cout << (in = p) << '/' << (in = q) << '\n';}return 0;
}

B. portal

image

可以暴力建图跑最短路,代码还没写

C. go

image

神秘 dp 题,还没搞懂

D. yggdrasil

image

本题最大难度在于读题,首先要知道题目所说的弹回去的道路是点而不是边。所以题目求的其实就是深度和,但是边权要减去 \(a_u\)。所以可以直接上换根模板

然后 \(\text{INF}\) 取小了。

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using LL = long long;const int kMaxN = 1e6 + 5;
const LL kP = 998244353;bool Mst;
LL T = 1, n, a[kMaxN], ans = 1e18, dep[kMaxN], dp[kMaxN], pos, sz[kMaxN];
vector<pair<int, LL> > g[kMaxN];
bool Med;void DFS(int u, int fa) {sz[u] = 1;for (pair<int, LL> i : g[u]) {LL v = i.first, w = i.second;if (v != fa) {dep[v] = dep[u] + max(w - a[u], 0ll), DFS(v, u), sz[u] += sz[v];}}
}
void DFS1(int u, int fa) {for (pair<int, LL> i : g[u]) {LL v = i.first, w = i.second;if (v != fa) {dp[v] = dp[u] - sz[v] * max(w - a[u], 0ll) + (n - sz[v]) * max(w - a[v], 0ll), DFS1(v, u);}}
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);freopen("yggdrasil.in", "r", stdin), freopen("yggdrasil.out", "w", stdout);cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1, u, v, w; i < n; i++) {cin >> u >> v >> w, g[u].push_back({v, w}), g[v].push_back({u, w});}DFS(1, 0);for (int i = 1; i <= n; i++) {dp[1] += dep[i];}DFS1(1, 0);for (int i = 1; i <= n; i++) {if (dp[i] < ans) {ans = dp[i], pos = i;}}cout << pos << '\n' << ans << '\n';return 0;
}
http://www.zskr.cn/news/11850.html

相关文章:

  • 完整教程:C 语言宏函数进阶:逗号表达式与 GNU 拓展的妙用
  • 当日总结(课后作业2)
  • AI 低代码平台:不止于 “快”,解码技术融合的深层逻辑
  • 动态内存管理(2) - 详解
  • Nano-Banana免费使用指南:一键生成专属3D手办,附超详细提示词 - 指南
  • 绘制金融集团监控大屏的地图demo
  • AM1.5G 太阳光谱 - 教程
  • 常用注解汇总
  • 软件工程学习日志2025.9.25
  • java课基础问题整理与解答
  • 完整教程:(13)GPS/无GPS转换
  • 第四篇
  • CF Round 1053(2150 2151) 总结
  • AT_agc012_d [AGC012D] Colorful Balls
  • 9/25
  • 关闭Edge浏览器页面的圆角效果
  • 搜索二维矩阵II-leetcode
  • Rust/C/C++ 混合构建 - Cmake集成Cargo编译动态库
  • 学习敏捷课程PSM,自考证书分享
  • 详细介绍:基于卷积神经网络的人车识别技术:从原理突破到场景重构的深度探索
  • Rust/C/C++ 混合构建 - 用Bazel构建Rust与C
  • sync.pool 面试题
  • 深入解析:SpringBoot与反射
  • 云栖小镇现场追踪!触摸AI 未来
  • 实用指南:【JavaEE】多线程案例(一)
  • Java学习日记9.18
  • AI Agent如何重塑人力资源管理?易路iBuilder平台实战案例深度解析
  • docker-compose + macvlan + Elasticsearch - 9.1.4 + Kibana - 9.1.4
  • WinForm 计时器 Timer 学习笔记
  • 深入了解一波JVM内存模型