2020模拟赛I 游记&&题解

Day 0

晚上打了线段树合并与动态 d p dp 的板子,结果两个都写炸了 。同时,在比赛的界面上有我说的一句名言——“我不拿全班倒数第一我直播吃屎 ”。

一想到明天要与班内的几个神仙比赛,就感觉自己要凉凉。

晚上睡得比较早, 11 : 00 11:00 就睡了,毫无信心可言

Day 1

早上颓颓颓,等到了下午的比赛。

比赛开始前几位大佬也在颓,感觉他们都准备得很好要 A K AK 虐全场了呢

谁叫我这么菜呢 QWQ


13 : 15 13:15 开始比赛。

开题。

T 1 T1 暴力特别好打,于是果断先拿到了暴力的 50 50 分。

接着考虑第二档分。可以发现,若一个数被两个互质的数进行了操作,显然这个数就变成了 1 1 ,并且之后也永远是 1 1 。由于数据随机构造,可以直接分块做,时间复杂度并不高。

期望得分 80 80 分。正解先不想,看 T 2 T2

T 2 T2 暴搜貌似只有 25 25 分,于是开始剪枝。 20 m i n 20min 后打完了暴搜+剪枝的程序,然后去测样例 1 1 与样例 2 2 ,不出意外都过了;但是大样例却输出了比答案大 1 1 的数,不是最优解。

不慌,看了下暴搜的代码,发现剪枝剪挂了,把等于号去掉就能过掉样例。

信心满满地提交之后, G H GH 神犇突然让本蒟蒻看题……猛然发现,并没有判答案为 1 -1 的情况,加上去之后再交一遍,并没有什么问题。

接着去 T 3 T3 ,树形 d p dp 式子显然,但是由于指数过大只能拿到 30 30 分。先切掉了这 30 30 分,期望得分 80 + 50 + 30 = 160 80+50+30=160 分。

回顾了一下三题,发现 T 2 T2 最为好想。根据套路,爆搜超时就果断……图论建模!!!

我们只需要将每个节点对离它最远的非#节点连边即可,但是走过的路都变成了障碍似乎很难搞的样子……推了推式子,发现从在 [ l , r ] [l,r] 区间内 l l 到各个节点需要走 0 , 2 , 4 , 6 2 k , 2 k 1 , 2 k 3 3 , 1 0,2,4,6……2k,2k-1,2k-3……3,1 步,于是就建出了一个节点数为 n m nm ,边数为 n 2 m 2 n^2m^2 的图。

由于有 S u b t a s k Subtask ,所以 S u b t a s k   3 Subtask\ 3 n , m 100 n,m≤100 总有一个测试点可以轻松卡掉我……算了,去看 T 3 T3

T 3 T3 画了张图,正解就出来了。但是,唯一的问题也是最重要的问题,如何比较多个 2 2 的次方数之和的大小关系。

想了 20 20 分钟,不会咕咕咕……


接着,回到 T 1 T1 开始对拍。

对拍了第一组数据,就不一样?!

查了一下分块并没有什么问题,发现 i f if 语句写错了……可是又不知道哪里写错了,狂喊不会写 i f if 语句……

原来是 U B UB 导致了这种神奇的状况,把 U B UB 去掉之后,再测一下。

还是不一样?我太难了QWQ

查了 30 30 分钟,把整个代码都看了一遍,但是又查不出错误……心态炸锅,仅剩 30 30 分钟而 T 1 T1 只有暴力分的我表示很慌。

发现分块写挂了,对于小区间的询问与查询被算了两遍,加个 m i n min m a x max 的比较,然后再测……

还是不一样?

同样的错误,再改一下,就并无大碍啦~对拍了 10 10 组数据, n , m = 100000 n,m=100000 的情况把电脑跑爆了终于跑出来了,仍然暴力输出的结果与分块输出的结果一样。

比赛结束前 2 2 分钟终于搞好了 T 1 T1 ,如释重负地倒在了桌子上QAQ

“10,9,8,7,6,5,4,3,2,1……”

由于这是 O I OI 赛制,我们都在等着排行榜……紧张QAQ

什么鬼?只有 50 + 50 + 8 = 108 50+50+8=108 ?而且 G H GH 还说我 T 3 T3 只有 0 0 分,是本蒟蒻提前提交而多拿了分?

我太菜了……看了下 T 1 T1 的提交记录,发现分块全 T T 了?怎么会呢……原来, G c d Gcd 也有较大的时间复杂度,被毒瘤地卡常了。

T 3 T3 怎么会写挂? G H GH L X LX 两位神犇过来帮我检查,也没检查出什么来……肯定是 s b sb 错误,我太菜了。

最高分竟然就是暴力分……群里面刷爆了"群殴毒瘤出题人"的表情包,让 G H GH 神犇一脸无辜;令人开心的是,他说本场比赛难度有点大了,下一次会减难度。

事实上,无论出题人良心还是毒瘤,我们做到的都是一样的题目。

orz


Day 1.5

G H GH 神犇上台说了下做法。

T1

可以发现,一个数要么不被改变,要么就被改变而且被除以 2 2 。于是我们用可爱的线段树直接维护一个区间的 l c m lcm ,如果目前这个修改的值是这个区间 l c m lcm 的倍数,就放弃修改,否则一路递归下去并实时维护一个节点对应区间的 l c m lcm 即可。如果 l c m lcm 过大,显然 x x (修改的之)不是它的倍数,就递归修改啦。

没想到 g c d gcd 的性质——一个数要么不被改变,要么就被改变而且被除以 2 2 ,菜死了QAQ

T2

果然是图论建模。

我们对于每一行,它与它相邻的一个格子连一条权值为 2 2 的边,离他最远的非障碍格子连一条权值为 1 1 的边就行了……离正解只差一步,菜死了QAQ

T3

我们可以用平衡树(set)来维护该子数中,各条边的权值和的二进制位表示下的各个 1 1 的位置,每次启发式合并,然后贪心地大的走第二次,其他仅走一次即可。

忘记了二进制位表示与 s e t set 维护 1 1 的位置,及启发式合并的优化,太菜了QAQ


最后,膜拜神仙 G H GH

orz
orz
orz
orz
orz
orz
orz
orz

GH AK IOI IN ONE SECOND!

猜你喜欢

转载自blog.csdn.net/Cherrt/article/details/108180506