CF522

前边题比较水,T6还行,强推T7

T1

题面翻译

乱序给出\(a+b,a+c,b+c,a+b+c\),要求还原得到一组正整数a,b,c,保证有解。

此题做法

最大值一定是\(a+b+c\)\(a,b,c\)分别由\(a+b+c-(b+c)\),...得到,直接做做完了。

T2

题面翻译

给定数列,求最小的d,使得元素a变成a+d或者a-d或者a之后整个序列相等

数据范围:\(n\in[1,100],a[i]\in[1,100]\)

此题做法

分讨题,容易发现,序列中最多有三种不同元素(分别作为a+d,a-d,a),只需要讨论序列中不同元素个数即可。

一种:\(d=0\)

二种:若\((a-b)\%2==0\),则可以令\(d=(a-b)/2\)

若不为0,则\(d=a-b\)

三种:从小到大依次为\(a-d\)\(a\)\(a+d\)

T3

题面翻译

给定a的数量,b的数量,c的数量。周一、四、日,a-1;周二、六,b-1;周三、五,c-1。从一周任意一天开始,求最长的\(a>=0\&\&b>=0\&\&c>=0\)的天数。

此题做法

先将完整度过的周数减去,再枚举剩下一周从哪天开始

T4

题面翻译(摘自洛谷)

在一个数轴上,有一个机器人要从 x=0处移动到 x=n处。机器人身上有两种电池,第一种是普通电池,第二种是太阳能可充电电池,普通电池的容量上限为 b点电量,太阳能电池的容量上限为 a点电量。

定义数轴上的第 i 段线段代表左端点为 x=i−1,右端点为 x=i的线段。

这 n条线段中,有一些线段可以被太阳照射到。

当机器人向右移动一个单位时,它会消耗一点电量。

当机器人走到一个可以被太阳照射到的线段上时,如果他是使用普通电池走到这条线段的并且太阳能电池的电量不满,则可以增加一点电量。这里的线段特指长度为 1 的线段。即如果它从一条被照射到的线段上走到另一条被照射的线段上,依然有可能增加电量。

机器人总电量为 0 或到达终点时会停下。现在请你求出机器人最远可以走多远。

此题做法

考虑贪心,能充电就充电以后不会更劣(普通电池1格最多换来一格太阳能电池,能换就换不会让之后更劣),在不被阳光照到的地方优先损耗太阳能电池能保证将来能尽量多的充电,故而,能充电就充电,不能充电先耗太阳能。

T5

题面翻译

给定一个排列,两个人顺次挑选元素,每次会将场上剩下的元素值最高的和他左右各 k 个从挑出,然后由另一人再挑。在挑选时如果一侧不足 k 个人则将这些人都挑入。

请求出每个人最终加入的是哪个队伍。

此题做法

模拟题,用priority_queue维护剩下的元素值最高的,用双向链表维护左右侧剩下的k个人,选出去后打一个标记即可。

T6

题面翻译(摘自洛谷)

商店里有 n 双鞋,每双鞋都有一个价格。你要买其中的严格 k 双。每双鞋只能被买一次。

你每次购买可以挑选剩余鞋中的任意一个子集来购买集合中所有的鞋。

有 m种套餐,第 i种套餐代表如果一次性购买 \(x_i\)​ 双鞋则其中最便宜的 yi双免费。

这 m 种套餐每种都可以用任意次。

现在请求出买严格 k双鞋的最小化费。

数据范围:\(n\in[1,2*10^5],k\in[1,2000]\)

此题做法

首先,肯定从小往大买最优,因为顺次买,可以最大化本次的花费和之后能免费的鞋,所以我们排序。

然后剩下部分不能贪心,考虑dp,dp[i]表示买了i双鞋的最小花费。

然后我们做一个前缀和,sum[i]表示1-i的花费。则转移方程为\(f[i]=f[j]+sum[i]-sum[j+y_k-1](j=i-x_k)\),复杂度\(O(k^2)\),不需要优化就做完了。

T7

题面翻译

给定序列,求两两lcm(最小公倍数)的最小值。

数据范围:\(n\in[1,10^6],a[i]\in[1,10^7]\)

时间:\(4s\)

此题做法

枚举所有二元组并求gcd,复杂度\(O(n^2logn)\)二元定一元之后也很难想到不枚举另一元的做法,需要一些其他做法来高效枚举。

我们考虑一个精妙的做法:由于​\(lcm(i,j)=i*j/gcd(i,j)\)​,我们考虑能否枚举\(gcd(i,j)\)

我们枚举​\(gcd(i,j)\)​并枚举​\(gcd(i,j)\)​的倍数,找出​\(gcd(i,j)\)​的两个最小倍数,这两个数的乘积​\(/gcd(i,j)\)​,就是以​\(gcd(i,j)\)​为gcd的二元组的最小​\(lcm\)​。复杂度\(O(VlogV)\)

总结:充分利用所维护信息的性质

posted @ 2024-11-24 10:32  chenruikang's_blog  阅读(39)  评论(0)    收藏  举报