CSP-S2考前综合强化刷题 Day1

阿克挂 240 /dk

A

n n n 张牌,奇数属于第一个人,偶数属于第二个人,两个人轮流按扑克规则进行游戏。指定一个先手,求谁能获胜。

以后看见这些简单的找规律题,一定要从下边界开始一个个手玩,不然爆零两行泪。

n = 2 n = 2 n=2 时显然谁先手谁获胜,这是一个特殊情况,下面默认 n > 2 n > 2 n>2

n n n 为奇数时

1 2 3 4 5
A 1 3 5
B 2 4

当 A​ 先手时,他可以选 1 1 1,之后去盖 B​。

当 B 先手时,它可以选 2 2 2,之后去盖 A。

n n n 为偶数时

1 2 3 4 5 6
A 1 3 5
B 2 4 6

当 A 先手时,它随便选一个数,B 都可以用最大的数去盖他,之后主动权就是 B 的了,一直压着打就行。

当 B 先手更不用提了。

不需要高精,偶数奇数直接看最后一位。

B

n × m n \times m n×m 的网格刷颜色,初始都是红色,每次可以把一行或一列染成红色或蓝色,问最后蓝色的个数。

套路题,显然对于同一行或列的操作,只有最后一次有用,那么记录一下最后一次的操作和操作的时间。这样我们通过前缀和,可以求出在某一个对行染色操作之后,有多少个对列染色。枚举行求贡献,讨论一下

  • 如果当前行是红色,那么求有多少个成蓝色,贡献是 m − m- m 在它之后蓝色的列数。
  • 如果当前行是蓝色,贡献是在它之后的红色列数。

std 是倒序求,这样不用前缀和了。

有一个拓展

先明确一点,那个 p p p q q q 是为了减少输入量的,直接看成一个给定的区间就行了。还有,区间覆盖不能差分。

直接说一个有点像暴力的做法。还是倒着处理。我们把每个位置看作一个并查集,初始老大都是自己。对于一个区间 [ l , r ] [l,r] [l,r] 找到里面的并查集进行修改,这样你记录一下每个点为左端点有没有并查集就行,然后你将之间所有的并查集合并到 r + 1 r + 1 r+1 所归属的并查集中,手玩一下正确性也没问题。复杂度呢就是你每个点算一次就被合并了,不会重复的,所以是线性的。

C

给你 n n n 个人的初始位置和速度,和 m m m 个形如 t   k t \ k t k 的询问,求 t t t 秒后排名为 k k k 的人的编号,位置相同编号小优先。

做过一道类似的题,所以开始想偏了,最后竟然暴力碾压标算。

t > 1 0 5 t > 10^5 t>105 t ≤ 1 0 5 t \leq 10^5 t105 讨论,这样 > 1 0 5 > 10^5 >105 初始位置的影响就微乎其微了,直接以 v v v 为第一关键字, a a a 为第二关键字, i d id id 为第三关键字排序。 k = 1 k = 1 k=1 的直接求最大值,这是 O ( n ) O(n) O(n) 的。

对于其它的数据,可以调用 stl 的强大函数 nth_element,它可以 O ( n ) O(n) O(n) 求第 k k k 大。我的做法就是想 sort 暴力冲不过去,所以我离线,对于相同时间的一个 sort 搞定,然后直接冲。

ppt 中给了另一个做法,说是将询问离线,因为两个人之间追赶只有一次,因为不同一次函数只有至多一个交点。先按 t = 0 t=0 t=0 排序,然后按时间顺序从小到大,冒泡一下。注意,冒泡看上去是 O ( n 2 ) O(n^2) O(n2) 的,但我们只交换相邻两个数,你考虑把一个数往前移动,肯定是连着移动的,如果某一个位置不行了就直接退出循环,所以不是立方。

类似的题是让你回答前若干次的追赶。

先按 t = 0 t = 0 t=0 排序,数学建模一下,把每个人看成一条直线,那么你求出相邻两个追赶的时间,也就是联立方程,那么用堆维护一下,注意这里追赶一定先在相邻两个人之间发生,所以加进堆中的是配对。

翟佬的话如醍醐灌顶,其实暴力能过很大原因在于你上一次排好序了,这一次只是微微调整。

D

这个四次方暴力海星,就是一个区间 dp 吧。显然先把序列倒序,每个元素都减去 1 1 1,这样价值是前缀的乘积。我赛时到这,就没往下想了,臻可惜。

然后应用一个结论,你选的一定是一段长为 1 1 1 的和另一段长为任意值的,那么就是个 O ( n m ) O(nm) O(nm) 的。

略证一下,你考虑 A 选了 x x x y y y B B B 选了一堆数是一个 k k k,有
( x + y ) × k = x × k + y × k (x + y) \times k = x \times k + y \times k (x+y)×k=x×k+y×k
那么把 x x x y y y 拆开都相等了,给别的数用何乐而不为呢。

闲话

出题人:这道题我设置了两个没有 n = 2 n=2 n=2 的点,我多凉心。

wyz:这比赛除了写挂还有人能不阿克?

戚哥 rk 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值