当前位置: 首页 > 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.hskmm.com/?act=detail&tid=17337

相关文章:

  • 代码随想录算法训练营第九天 |151.翻转字符串里的单词、 LCR 182. 动态口令、28. 实现 strStr()、459.重复的子字符串
  • 当日总结(课后作业2)
  • Codeforces Global Round 29 (Div. 1 + Div. 2) A~E
  • AI 低代码平台:不止于 “快”,解码技术融合的深层逻辑
  • 实用指南:【知识拓展Trip Five】寄存器
  • 计算机视觉(opencv)实战二十七——目标跟踪 - 教程
  • P8367 [LNOI2022] 盒
  • 蓝桥杯 2025 省 B 题:画展布置 - 题解笔记
  • 二维坐标下的运算
  • Polar2025秋季个人挑战赛web-writeup
  • Day4
  • 题解:P12751 [POI 2017 R2] 集装箱 Shipping containers
  • 弱网配置
  • 绘制金融集团监控大屏的地图demo
  • 实用指南:《原神助手》开源神器:游戏体验大升级
  • 9-25
  • AT_agc021_d [AGC021D] Reversed LCS
  • adb shell 常用文件命令
  • Java文件编程
  • 自我介绍与规划
  • 软件工程学习日志2025.9.25
  • 从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践 - 实践
  • redis实现分布式锁1
  • 完整教程:(13)GPS/无GPS转换
  • Transformer自回归关键技术:掩码注意力原理与PyTorch完整实现
  • 第四篇
  • PyTorch图神经网络(六)
  • Qwen多模态系列模型笔记—Qwen-VL
  • go 语法里变量前面增加、*区别
  • 历程回顾-(2024-2025)