CSP-S 18

news/2025/10/20 21:35:22/文章来源:https://www.cnblogs.com/HS-fu3/p/19153714

9.8

100+0+20+0

废话

赛时t1先打的暴搜,大数据直接飞了,折半搜即过,30min(当时感觉写的挺快应该不会很差)。

t2先模样例,哎怎么不对?哦少考虑情况。哎怎么还是不对?啊乘写成加了...

各种唐诗错误开始发力了,遂先开t3。

t3一眼出暴力,想了半小时优化,毫无成效...

打个暴力还锅了半天(set的*加不加唐了🤪)。

t4一看又是期望(此时剩余1h左右),暴力都没写折返回t2想拼暴力30pts。

紧张刺激暴力ing

还剩5min,怎么还有一个不对,哎呀又少考虑情况🤣。

最终暴力也没出来。😡😡😡

题解

t1 code(虽然我感觉没啥放的必要,不是人均过吗)

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, up, ans, tot;
int a[10];
int ans1[1 << 20];inline int km(int a, int b)
{int ans = 1;while (b){if (b & 1)ans *= a;a *= a;b >>= 1;}return ans;
}inline int mid(int k)
{int ans, l = 1, r = tot;while (l <= r){int mid = (l + r) >> 1;if (ans1[mid] <= k)l = mid + 1, ans = mid;elser = mid - 1;}return ans;
}void dfs1(int x, int num, int k, int lim)
{if (x > lim){if (num <= up)ans1[++tot] = num;return;}if (num + km(a[x], k) > up)return;dfs1(x, num, k + 1, lim);dfs1(x + 1, num + km(a[x], k), 1, lim);
}void dfs2(int x, int num, int k, int lim)
{if (x > lim){if (num <= up)ans += mid(up - num);return;}if (num + km(a[x], k) > up)return;dfs2(x, num, k + 1, lim);dfs2(x + 1, num + km(a[x], k), 1, lim);
}signed main()
{// freopen("problem.in", "r", stdin);// freopen("problem.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> up;int cnt, num;for (int i = 1; i <= n; ++i)cin >> a[i];dfs1(1, 0, 1, n >> 1);sort(ans1 + 1, ans1 + 1 + tot);dfs2((n >> 1) + 1, 0, 1, n);cout << ans;return 0;
}

t2 就得好好说说了。

题面

如果把期望去掉

那直接秒了,树上差分即可(虽然我喜欢树剖做)

加上期望后仍然考虑树上差分。

\(ans=E(dep(u))+E(dep(v))-2\times lca(dep(u,v))\)

显然的是:三部分贡献独立,依此求出累加即可。

这里令 \(u\leq v\) .

\(u=v\) ,直接特判0.

否则开始处理。

\(sum_i\) 表示 \(a_i\) 的前缀和。

\(dep_u\) 表示 \(E(dep(u))\).

考虑求 \(dep_u\) .

\(dep_u=\frac{\sum_{i=1}^{u-1}dep_i\times a_i}{sum_{u-1}}+b_i\)

就是“之前期望和+当前贡献”(线性求期望)的形式。

再考虑求 \(lca(dep(u,v))\) .

\(lca_u\) 表示 \(u\)\(u,v\) 的 LCA 时的期望。

转移式:

\(lca_u=\frac{\sum_{i=1}^{u-1}lca_i\times a_i}{sum_u}+\frac{dep_u\times a_u}{sum_u}\)

还有一种情况:\(lca(u,v)\)\(u\) 的祖先。

\(lcf_x\) 表示 \(x=lca(u,v)\)\(x\)\(u\) 的祖先。

转移式:

\(lcf_x=\frac{\sum_{i=1}^{x-1}lca_i\times a_i}{sum_x}+\frac{(dep_x-b_x)\times a_x}{sum_x}\)

最终结果:

\(ans=2\times (dep_u+dep_v-lca_u-lcf_u)-b_u-b_v)\)

一些注意事项:

观察到转移式均为 \(O(n^2)\).

发现可以前缀和优化,于是将至 \(O(n)\).

\(ans\) 中乘2:

自己手模一棵树,观察易得:链两端的节点只会产生一次贡献,而中间部分会影响上下,相当于产生两次贡献(此种说法并不严谨,只是易于理解,建议动手画图),因此乘2.

最终减去 \(b_u,b_v\)

我的写法是将边权赋成点权,因此 \(u,v\) 部分算重了,故减去。

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9 + 7;
const int N = 3e5 + 10;
int n, q;
int a[N], b[N], sum[N], dep[N], lca[N], lcfa[N];inline int km(int a, int b)
{int ans = 1;while (b){if (b & 1)ans = ans * a % mod;a = a * a % mod;b >>= 1;}return ans;
}signed main()
{freopen("name.in","r",stdin);freopen("name.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cin >> n >> q;for (int i = 1; i <= n; i++)cin >> a[i], sum[i] = sum[i - 1] + a[i];for (int i = 1; i <= n; i++)cin >> b[i], sum[i] = km(sum[i], mod - 2);dep[1] = b[1];                 // 转为点权(类比)int num = dep[1] * a[1] % mod; // dep:期望for (int i = 2; i <= n; i++){dep[i] = (num * sum[i - 1] % mod + b[i]) % mod; // 转移式均类似于:之前期望累积和+当前贡献num = (num + dep[i] * a[i] % mod) % mod;}lca[1] = b[1]; // lca_u:u为lca(u,v)的期望num = lca[1] * a[1] % mod;for (int i = 2; i < n; i++){lca[i] = (num * sum[i] % mod + dep[i] * a[i] % mod * sum[i] % mod) % mod;num = (num + lca[i] * a[i] % mod) % mod;}lcfa[1] = 0; // lcfa:两点lca为此结点祖先的期望num = lcfa[1] * a[1] % mod;for (int i = 2; i < n; i++){lcfa[i] = (num * sum[i] % mod + (dep[i] - b[i]) * a[i] % mod * sum[i] % mod) % mod;num = (num + lcfa[i] * a[i] % mod) % mod;}int u, v;while (q--){cin >> u >> v;if (u == v){cout << 0 << "\n";continue;}if (u > v)swap(u, v);int ans = (2 * (((dep[u] + dep[v]) % mod - lca[u]) % mod - lcfa[u]) % mod - b[u] - b[v]) % mod;cout << (ans + mod) % mod << "\n";}return 0;
}

t3

t4

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

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

相关文章

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

小马算力致敬程序员

10 月 20日凌晨,我把最后一条 CI 流水线从自建 GPU 机器迁移到小马算力,推送、合并、触发——单元测试跑完,账单弹出:0.82。 同一时刻,公司群里弹出财务提醒:上月闲置显卡折旧 4 300。那一刻,我意识到“算力”这…

Project. 2025.11化学小组pre

\(\boldsymbol{Project.}\) 2025.11 化学小组pre \(\rm I\) 选题阶段 \(\it 1.1\) 超导 【文献堆】介绍超导(泛) 常压下双层结构镍氧化物薄膜高温超导电性的发现与研究展望 高压下金属硼碳(氮)化合物的结构及超导电…

蛋白表达标签:重组蛋白研究的精妙引擎

在重组蛋白的世界里,效率与精准是核心追求。如何从复杂的细胞裂解液中快速捕获目标蛋白?如何直观地追踪其表达与定位?又如何让那些难以折叠的蛋白稳定溶解?这些问题的答案,常常不在于蛋白本身,而在于一个精妙的分…

106.腾讯地图位置服务再出错

106.腾讯地图位置服务再出错我再实现项目的一个客户端登录时候 出现问题为了实现此功能之前关于地图调用的总结https://www.cnblogs.com/gaodiyuanjin/p/19135390 以为换了就好了 但项目已经使用这个 顺便插一下 项目中…

Luogu P10034 「Cfz Round 3」Circle 题解 [ 蓝 ] [ 背包 DP ] [ 质数筛 ] [ 图论 ] [ 构造 ]

Circle:思维难度并没有很大,难点主要还是细节的特判上。 先转化题意:构造一张无自环的有向图,使得每个点的出度、入度均为 \(1\),并且部分点走 \(l\) 步后必须回到自己。 因为每个点的出度、入度均为 \(1\),所以…

2025.10.20模拟赛

赛时 T1是原...10分钟过了 然后先看了眼3个题,T2感觉可推,T3感觉更简单 想开T3,然后想到还是按顺序开吧,所以开的T2 先推了一会重复的性质,发现什么也没有 此时1h过去了 然后想到前缀和的性质,然后没怎么证明,然…

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告

20232410 2025-2026-1 《网络与系统攻防技术》实验二实验报告 一、实验内容回答问题: (1)例举你能想到的一个后门进入到你系统中的可能方式? 比如某些钓鱼邮件或者钓鱼网站,携带着一些捆绑着后门程序的exe文件。若…

SQLite简单使用

SQLite的简单使用记录创建数据库创建完成简单使用先进行一个链接一个表 一个视图创建表 输入表明创建列后面的就跟MySQL大差不差了创建完之后点击OK点击这个可以查看SQL语句

Adaptive Learning Rate(自适应学习率) - -一叶知秋

Adaptive Learning Rate(自适应学习率) Adaptive Learning Rate(自适应学习率) 是指在模型训练过程中,学习率会根据参数更新的反馈自动调整,而不是使用一个固定值。其核心思想是: 👉 不同参数或不同训练阶段,…

新学期每日总结(第12天)

今日 相较昨日 学习了继承与多态

17 线程的创建

17 线程的创建进程 进程:一个程序的运行过程 线程:组成这个程序的并行的模块 一个进程可以包含多个线程。 线程的创建继承Thread类 实现Runnable接口 实现Callable接口1.继承Thread类 继承Thread类,重写run()方法,…

2025.10.20总结 - A

今天满课,感觉挺充实的,加油。

一般公共预算收入 + 全国政府性基金收入

一、税收增速意外创出新高 9月,一般公共预算收入(+2.6%),温和回升0.6个百分点,其中税收(+8.7%)显著回升5.3个百分点,增速创2023年7月以来新高;非税(-11.4%)受去年同期大幅征收、基数走高的影响跌幅扩大。支…

从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构

从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构事件驱动 事件驱动(Event Driven)是一种核心的编程范式,其根本特征是控制反转(Inversion of Control,IoC)。在这种模型中,程序的执行流不再由代码的…

类欧几里德算法

引入 Floor Sum 令 \(f(a,b,c,n)=\displaystyle \sum_{i=0}^{n}\lfloor\dfrac{a\times i+b}{c}\rfloor\)。我们要求的就是这个东西。 考虑如果 \(a,b\) 中有一个比 \(c\) 大。那么有: \[f(a,b,c,n)=\sum_{i=0}^{n}\lf…

AI助力可再生能源系统优化研究

本文介绍了研究者如何利用人工智能技术解决能源供应挑战,重点探讨了大语言模型在数值数据分析、风能评估和齿轮箱功率损失预测中的应用,以及将AI扩展到太阳能和水电等可再生能源领域的未来计划。使用AI应对能源供应挑…

结对项目:小学四则运算题目生成器

结对项目:小学四则运算题目生成器这个项目属于哪个课程 课程链接作业要求 作业链接作业的目标 结对编程实现一个自动生成小学四则运算题目的命令行程序学号姓名 3223004816王韵清,3223004820曾钰仪Github链接 Github…

数据范围

废话不多讲,直接给图:(注意:不同版本的c++程序,数据范围可能有所改动!!!)