CSP-S2025复赛模拟4补题报告(无AC code)
一、比赛分数
T1、智能公交:[100/100]
T2、暴力操作:[0/100]
T3、competition:[0/100]
T4、货物运输:[0/100]
(知足了孩子们,和wyh一样了)
二、题目正解
1、智能公交
题目重现:
马路上总共有个公交站台,编号
,有一辆智能公交车会在这
各占太之间穿梭。
如果智能公交车上没有乘客,只需要按动公交站台上的按钮,智能公交就会很快到达相应的站台。
例如,有人想从第五个公交站台到第十个公交站台,那么公交车会先从第
个站台跑到第五个站台,然后再从第五个站台跑到第十个站台,然后再回到第 站台停下。(智能公交可以随意的双向移动,不需要考虑智能公交是否掉头转弯等因素)假设相邻的两个站台的距离都是
千米,那么智能公交总共行走了
的距离。
现在有个人要依次乘坐智能公交,每个人都会等待智能公交停在
站台之后在按动当前站台按钮准备乘坐公交。现在已知第
个人都是从
站台到
站台。请你计算
,使得智能公交移动距离最短。最终输出
和最短的距离,
若有多个,输出最小的一个。
输入格式
输入第一行,包含两个整数
然后输入行,每行给定两个数字
,表示当前第
人要从
站台到
站台。
输出格式
输出一行包含两个整数,第一个数字表示公交停靠的位置,第二个数字表示最短距离。
思路(我的):
把所有扔到一个数组里,找到中位数(这里不是严格意义上的中位数,这里指的是构成中位数的两个数字中小的那一个),输出其站台号,再
算出时间,累加输出即可。
Teacher:
公交车从站台到站台
,且停靠位置
在
和
之间,那么移动距离为:
若停靠位置在,则公交车要多移动
距离。若停靠位置在
,则公交车要多移动
距离。我们可以发现,停靠位置从
到
,公交车多移动的距离呈公差为
的等差数列。
我们可以假设表示公交车停靠在
的总移动距离,那么给定
的时候,相当于将整个数组全部加
,并且将
到
的位置额外加一个公差为
的等差数列;同理,将
到
的位置加一个公差为
的等差数列。
考虑用差分来维护区间加法,等差数列加法。
2、暴力操作
题目重现:
有一个长为的序列
,你可以选择一个
,每次操作花费
的代价使得
。可以多次选择同一个
。你总共有
元。问最终序列的中位数最小是多少。保证
为奇数,
。
输入格式
第一行三个正整数。
第二行共个数,第
个数表示
。
第三行共个数,第
个数表示
。
输出格式
一行一个整数表示答案。
思路:
一定会将最小的个变小,将
修补为
的形式,再二分答案即可解决。复杂度
。
3、competition
题目重现:
现在有一个题目数量为的比赛,有一个团队想要来参加。
这个团队有位选手,编号为
的选手能做出来第
道题,每一道题他都有
的概率能做出来。
这个团队会随机派出一支队伍来参加这个比赛。
因为编号相邻的人关系更好,默契度也更高,所以说一个团队派出的队伍一直都是编号为连续的区间的选手。
一个队伍的得分为该队伍能做出的题的数量。
求这个团队参加比赛的期望得分。
注:一道题只能被做出来一次
输入格式
第一行为两个整数表示选手人数和比赛题数。
第行,每行有
个整数
表示编号为
的人会做第
道题。
输出格式
一行一个整数,为该团队参加比赛的期望得分(对取模)
思路:
Ⅰ
如果题目能做很多次那么答案就是
我们令表示第
个人前面的最靠右的能做出题目
的人的编号。
可以发现,多出的答案就是每个队伍重复AC的次数之和
显然和
在做第
道题时会重复,多出的方案数为
然后我们用区间赋值+区间求和线段树维护随着变化的
数组即可
Ⅱ
对于一道题,我们让每个组第一个做出来的人做贡献即可。
对于在第
道题目的贡献即为
同样用线段树维护。
Ⅲ
对于每一道题目,考虑用set维护哪些人能做这道题,并同时维护有多少区间不能做出贡献。
我们考虑设不能做出贡献的人的连续区间分别是,显然不能做出贡献的区间数量是
我们加入一个人,显然会让原本的非连续区间断开,变成两个
删除一个人,会让两个区间合为一个
因此,我们不能贡献的区间数量便可以动态维护了。
4、货物运输
题目重现:
K 国有 座城市,被
条双向道路连接,道路的长度为
,并且任意一条道路最多在一个简单环内。每一座城市都有
个单位的资源,为了均衡城市的发展,K 国的国王希望均分这
的资源,即让每座城市的资源数等于
(数据保证
是
的倍数)。已知将每单位的资源运输到相邻城市需要花费道路长度
的代价。
求使得资源均分的最小代价。
输入格式
第一行两个整数 ,表示城市的数量和道路的数量。
第二行输入 个整数
,表示城市
的资源数量。
接下来 行,每行三个整数
,表示双向道路。
输出格式
一个整数,表示运输资源使得均分所需的最小花费。
思路:
Ⅰ、树做法
当时,图就为一棵树。令
,最终要令
。
通过树形DP,从叶子开始往上转移,产生的代价为当前节点的与道路长度的乘积。
Ⅱ、环的做法
考虑原图为环的做法,令,最终要令
。
不妨设环上的节点编号为。
表示
向
运输的资源数量,当
时表示
向
运输。
可列出方程
故有
因此可以将用
表示,:
,最后的答案为
。
现在问题转化为求出的值,使得
最小。对于
的情况,
直接取
的中位数类似地,对于
没有限制的情况,可以看作有
个
,取
个数的中位数。复杂度为排序的
。
Ⅲ、基环树的做法
基环树就是在树中添加一条边,可以看作是一个环上挂着若干棵树。
对于环上的树,采用树上的做法,将除了根以外的变为
.
这样就将原图变成了环,使用方法Ⅱ求解,再加上树上的答案即可。
Ⅳ、仙人掌图的做法
发现边最多在一个简单环内,满足仙人掌图的性质,搜索的时候将环处理出来计算贡献并转移,非环边用类似树上DP的方式向上转移。
三、赛后总结
这次还行马,起码T1过掉了,后面的题等以后练练线段树之类的数据结构&算法再看看吧,总之这是一个好的开始,也算是最后一天的小惊喜,以后继续加油!