三月做题记录
打*的是自己做出来的
题解还没补充完
CF1637E Best Pair
这道题有一个关键的结论,就是长度为n的序列,cnt[i]最多有sqrt(n)左右种
所以我们可以枚举每一种cnt[i]的取值,然后从大到小枚举取值,只要该对不是坏对就记录答案,然后break,
因为坏对的个数最多只有m个,因此时间复杂度是正确的
P2757 [国家集训队] 等差子序列
首先发现只要满足条件,则必然存在x<y<z且y-x=z-y,这样条件得到了简化
然后我们从左到右扫描序列,每次考虑以当前点作为y,此时发现x和z中只要恰好一个已经遍历过,一个还没遍历过就满足条件
即只要左右两边的对称点中有一组满足条件(注意序列是一个排列,这个条件很重要,不要漏了)
发现这类似于回文的判定,想到哈希
这里需要用到一个trick:线段树维护哈希
即维护两棵线段树,一棵从左往右,一棵从右往左
这题的实现细节还是比较多的(我还是太菜了)
CF1628D1 Game on Sum (Easy Version)
这道题要先考虑到Alice和Bob的最优决策是要看后面的状态的,所以可以倒着做dp,这是很多博弈论的一个trick
我们设f[i][j]为后i轮,Bob使用j次加法的答案
先考虑Bob,他可能选择加或减,所以f[i][j]=min(f[i][j]-k,f[i][j-1]+k);k是Alice选的数,Bob会选择最小值
再考虑Alice,她希望这个最小值最大,所以她会让这两个值尽量接近,所以k=(f[i][j]-f[i][j-1])/2;
所以f[i][j]=(f[i][j]+f[i][j-1])/2;
边界情况f[i][0]=0;因为接下来Alice无论选什么Bob都选择减法,所以Alice每轮都会选择0
f[i][n-i+1]=(n-i+1)*k;因为接下来Bob必须选加法,所以Alice每轮都会选最大值
因为要取模,所以要求一下逆元
AT_arc200_a [ARC200A] Dot Product
先考虑两个数的情况
a1x1+a2x2>0
a1/a2>x1/x2
b1x1+b2x2<0
b1/b2<x1/x2
b1/b2<x1/x2<a1/a2
所以我们可以令x1=a1+b1,x2=a2+b2
只有a1/a2=b1/b2时不行
所以对于n个数,若a1/b1=a2/b2=...=a[n]/b[n]时无解
否则选任意两个作如上操作,剩下的填0即可
AT_arc200_b [ARC200B] LCM
首先如果a>c或b>c或a+b<c,则无解
否则如果a+b=c,找最大的a位和b位质数即可
否则如果a+b>c
令w=a+b-c-1
则让两个数为最小的a-w位质数pow(10,w)+最小的b-w为质数pow(10,w)即可
注意不能令w=a+b-c,取最大的,因为a=1,b=16,c=16时a-w=0
如果两个数相同要继续往下找
需要预处理,结合打表
P6617 查找 Search
CF1187E Tree Painting
CF1299C Water Balance
P3809 【模板】后缀排序
模板题
P10469 后缀数组
模板题
*P3763 [TJOI2017] DNA
P2197 【模板】Nim 游戏
模板题
CF665E Beautiful Subarrays
AT_arc075_c [ARC075E] Meaningful Mean
先把每个数减k,计算前缀和,然后离散化+树状数组即可
P1712 [NOI2016] 区间
*P15972 「RedStone OI R10 A」菊花残
*P15973 「RedStone OI R10 B」小耳猫
*P15974 「RedStone OI R10 C」切蛋糕

浙公网安备 33010602011771号