牛客网暑期ACM多校训练营(第四场)

Rank Solved A B C D E F G H I J
71/465 4/10 O Ø Ø O Ø O O . . Ø

O: 当场通过

Ø: 赛后通过

.: 尚未通过

A Ternary String

solved by ch&chelly


B Interval Revisited

upsolved by chelly


chelly's solution

首先需要发现一个性质,即一个位置顶多被两条线段覆盖
于是就可以dp了,首先将所有线段按照右端点从小到大排序
dp[i][j]表示选了第i个线段,已经覆盖的区间为[1,a[i].r],上一个线段的右端点在j的情况下的和的最小值
转移就枚举前面的一条线段,注意用前缀min优化
时间复杂度(O(nm))

C Chiaki Sequence Reloaded

upsolved by chelly


chelly's solution

看见(a(n))(a(frac{n}{2}))的关系,要想到二进制
经过简单分析发现ans(n)=cal(n)+cal(n/2)+cal(n/4)+cal(n/8)+..........
其中cal(n)满足若n%40/3则cal(n)=1,若满足n%41/2则cal(n)=-1
光分析出这样的性质仍然不够,我们考虑%4的意义,其实就是二进制的最后两位
于是我们得出计算ans(n)的方法,就是考察相邻的两个二进制位,若相等则+1,若不等则-1
于是就可以数位dp了

D Another Distinct Values

solved by ch


ch's solution

E Skyline

upsolved by chelly


chelly's solution

每个点(x,y)对答案的贡献就是1-π(1-p[i]),其中i是(x,y)右上方的点
那现在我们的操作就是对于每个点,把左下角的一个矩形全部乘上一个数,然后要询问最后的和
第一想法是二维前缀和,但坐标范围太大,不行
其实可以扫描线做,我们把扫描线从上往下扫,每层扫描线维护当前这个y对应的每个位置的值
容易发现两个离散的y之间的答案是相同的,所以可以离散之后扫描线
总结一下,就是我们从上往下扫描线,需要支持区间乘法,区间求和,这个直接用一个线段树即可

F Beautiful Garden

solved by chelly


chelly's solution

G Maximum Mode

solved by syf


syf's solution

H Double Palindrome

unsolved


I Permutation

unsolved


J Hash Function

upsolved by chelly


用并查集维护f[i]表示从i位置向右看第一个没填的位置是哪
然后用一个优先队列存下目前已经能填的数字(刚开始是那些a[i]%ni的数字)
将目前优先队列里最小的那个数字(a[x],x)填完之后,我们会解锁一个新的可填位置,那就是t=find((x+1)%n),若a[t]~t中间都是填过了(即find(a[t])
t),那么(a[t],t)就成为了一个可填的位置,将其加入优先队列
最后将优先队列里出队的顺序输出即可
时间复杂度(O(nlogn))

Replay

本场由chelly和ch线下组队f打的,syf在线上打。
开场开了A题,ch给出了一个靠谱的做法,但是指数取模方面出了问题,就搁置了。然后chelly开F,syf开G,chelly头脑发热漏了些情况,2发WA之后才过了F。syf的G也写了好久,也WA了两发。于是换chelly写G,ch开始开构造题D。然而chelly用了两种方法提交G,也都WA了……陷入僵局……于是又把锅甩给了syf,syf写了一下之后过了。ch的D题也构造出了,A掉了。接下来chelly和ch转攻A,chelly发现指数取模问题可以用降幂公式解决,开始码码码。提交上去,T了。然后chelly发现一共29个模数,前23个模数都是2的次幂,形式是2的次幂模2的次幂,所以不需要快速幂,直接指数取模就行,修改了下之后就过了(赛后发现chelly的降幂是个假的降幂公式……感谢弱弱的数据)。此时离结束还剩1个半小时,chelly和ch开始想J,一直想不出来,就结束了。

原文地址:https://www.cnblogs.com/Amadeus/p/9385857.html