第十六届浙江省大学生程序设计竞赛 比赛后记

这是我们最后一次叫卖竹鼠三元一只十元三只这个队名了,最后一场拿到了金算是弥补了全年的遗憾。

可是终于还是没有人来找我们买竹鼠(雾)

赛前:

1.队友前一天晚上请我们吃了肯德基,就很快乐

2.隐约觉得浙大的伙食比去年好了一点,要是可以加上饮料就更好了。

赛中:

1.浙大延续了一贯的出题风格:先送几道题给大家一点参与感,然后开始正式比赛决定奖牌。

2.签完到之后两队友开D和J,我开C,发现C不难,想完了C的做法之后就又看了一下K,发现K也挺好想的,于是趁队友在J题debug的间隙把K过了。队友过了J之后开始敲C,然后C也过了,由于运气特别好,C,K都没遇到什么障碍直接过了的缘故,这时候8题时间还在两个半小时。

3.后面开始开A和D,可是D一直没有推出一个通用的构造法,A的数据结构想错了,最后十分钟T了才发现这事儿不好办了。期间队友过了B,所以虽然看起来很忙但是也掩饰不住我后面挂机了两个半小时的事实,O(∩_∩)O

赛后:

1.出来一直觉得罚时爆炸,万万没想到最后会赢一手罚时。

2.从开幕式一开始就局促不安心态不良,想着要是沦为银牌第一怕是谁也顶不住,后面发现是多虑了。

3.开幕式刚开始的时候,点评的老师说除了传统强校一直强以外,也有不起眼弱校异军突起,莫名感觉自己金的概率提高了(雾)

4.总的来说,比赛结果很满意,划起水来很快乐。

口胡一下C,K的题解(其他也不会)

C.发现序列A想要possible的条件是,最多的数字的数量 * 2不超过序列长度。

由于字典序要求最小,考虑从前往后放入B,并且使得每次放入之后都满足以上的possible条件。

后面可以手推得一个更广泛的性质:假设一个数的贡献为当前序列中出现的次数加上还未放入B的数中出现的次数,如果所有数的贡献都不超过当前未放入B的序列长度的话,就是possible的。

有了这个性质,我们就可以考虑线段树维护一个所有数的贡献的最大值。如果当前贡献的最大值超过后面的序列长度,就不得不放入这个数以减小贡献,否则就放入字典序最小的数字(如果和A数组相同则第二小),由于一直在possible的情况下,所以除了最开始之外,不用考虑impossible的情况。

K.把情况分为两个字符串完全相同和不同的情况。

不同:维护出最左边L和最右边R不同的字符位置,意识到反转的位置肯定包含L,R这个区间,事实上,如果反转(L,R)不可行,那就没有可行的方案,否则就从L,R两边向两侧扩充,如果两侧的字母都相等,则ans++,否则说明没有更大的区间可以反转了,就结束。

相同:仔细一看就发现实际上相同的情况就是推算字符串中有多少个不同的回文子串的题。

看了一眼manacher的板子,确认过眼神,发现是水题。

原文地址:https://www.cnblogs.com/Hugh-Locke/p/10782957.html