A
考场模拟一天结果一看题解被暴力卡过去了
把每个蚂蚁爬到原点的时间扔队列里排序,队首蚂蚁拿完后加上往返一次的时间扔到队尾模拟
B
分种类前缀和
C
打个表可以发现,数字递增规律约是等差数列递增,但是遇到平方数会停止增加
[x=lfloorsqrt{n}
floor\
sum=(1+2+…+n)-(1^2+2^2+…+x^2)\
sum=frac{(1+n)n}{2}-frac{x(x+1)(2x+1)}{6}\
ans=sum*6
]
D
跳(4)格等于跳两个(2)格,所以奇数都能跳到,偶数都跳不到
E
白给
F
假设全(0)往里填(1),首先不会连着放,不然没用,徒增字典序
所以除了题目给定的不能放(1)的位置,一个(1)的两侧也是不能放(1)的位置
除了边缘,每放一个(1)都会增加两点贡献
所以枚举最后一位放(1)或者不放(1),然后从右到左能放就放
G
一个炮塔两侧不满一整段的部分单独记录,只有(2*m)次操作
中间部分线段树记录
统计答案时找出数值最大的(k)段翻倍
H
反悔贪心,想到了没写出来
观察数据范围,(n*sum u_i)只有(1e6),可以对每颗草单独处理
开两个堆,一个存前面多出来的,另一个存前面空缺的
以当前位置需要放入为例(val_i=min(a*i,c*|j-i|-val_j)),
其中(val_j)是曾经放入的多出的药草
这里关于(c*|j-i|)的处理,可以在堆中放入(-val_j-c*j),取出时加上(c_i)
I
不会,(lyh)聚聚出的数学题太毒了太难了
J
从前向后枚举
若是先见到大于当前位置的字符就直接挪过来,记录当前答案加之前挪动相等字符的答案
若是见到等于当前位置的字符就将字符挪过来,在后面继续寻找大于的字符
模拟题真是综合考研马力和清晰的思路
K
记录两个字符串相差多少个(H),再记录有多少位不同
每次改变可以减少(1)个不同,每次交换可以改变(2)个不同
先改变到(H)相等再交换
L
签到题,看清题目