一、赛后总结
Wuhu~萌新又来啦~
第一次在考场上写出NTT,虽然是比较裸,但感觉真的不错~
开场看03,思路比较直,就是dijk,但跨层跳跃想了好久~最后想到了类似于B树或者B-树一类的层内链表,连上后就能解决。因为dijk枚举到的每个点都是最短距离,所以对应层第一个枚举到的节点就是到这个层的最近距离点。
然后卡了2个小时左右的06,式子推出来了,又手搓了好多样例,但最后交就WA了。。。其间队友告诉我07有卷积形式,所以大概3点多一些的时候开始看07,发现卷积形式是很多的小多项式相乘。但毕竟多项式题做的不多,就尝试的写了一发排序后从小到大合并多项式,不出意外的T了。然后又想了一会,想到了类似于哈夫曼编码的每次找最小两个合并,但这样就要存储所有出现多项式的每一项。所以就用了Vector动态数组存储(平常真的不太用Vector,这里想的好慢)。改了这里后就顺利通过辣~
回身看06,测了很多样例又小黄鸭调试法看了好多遍,始终认为没问题。。。直到最后10min重读了一遍题: Now you can modify, add or delete 。瞬间呆住了,我以为now you can modify是一句套话(啊~现在你可以修改辣~。。。。。哭成傻子了呜呜呜呜呜啊啊啊啊),操作是增或删,实际上操作是改、增、删。。。最后稍微改了一下,当然也不出意外的没有改出来。考后来看的话,前面思维定式非常糟糕,导致考后也需要很长时间才想到abcd和abc这种改2次的字符串。当然想出来就通过啦~所以还是要好好读题(悲
最后谈一下没做出来的几个题:
- 02好像是min25?感觉现在NTT是低档知识点,min25也只是中档知识点了呜呜,但没办法还是要学
- 05DancingLink,输麻了。06真的是罪恶之源
- 08SAM+LCT,好久不见Link-Cut-Tree辣,但萌新真的字符串知识一塌糊涂。。。
- 09折半搜索,我超怎么感觉知识点真的可做。。。但也有可能萌新的数理基础推不出状态呜呜呜
- 11六面体旋转群?不懂,好像也比较难补了。。。
UDP1:补了04,呜呜呜,1e-10的误差写成了-1e10,调试+30min...两个不合法条件预处理是复制粘贴的,但发现错误后只改了一边,后面在找这个错误时又发现了竖直水平线多点共线可能的bug,调试+1.5h...总结起来是代码习惯不好,没有彻底想清楚细分情况就开敲,不出意外就会有错啊啊啊啊~
UDP2: 补了01,珂学家不可以不会珂朵莉树!
(by Star_Dream)
二、题解报告
1001 Pandaemonium Asphodelos: The First Circle (Savage)
题目没什么好说的,会珂朵莉树就会发现它是板子加动态开点线段树。
From 珂学家:
如果幸福有颜色,那一定是被终末之红浸染的蓝色!
世界で一番幸せな女の子
Always in my heart
1002 Jo loves counting
Min25筛、积性函数...还一点没学呢呜呜~后面争取补一下
1003 Slipper
比普通dijk多一个类似于B树B-树的层内建边的操作,建好边就是最短路板子题。
1004 The Surveying
状压,很快会补的~
补辣补辣~这个状压不是DP哦,之前理解有点问题~
后面状压枚举状态,即每个控制点选与不选,做check就行。
两个check条件,一是所有Detail Point都至少与一个选中的Control Point不跨越相交,二是所有Control Point都至少与另外一个选中的Check Point不跨越相交。显然直接在状压枚举里从头check不可取,所以考虑预处理。发现不跨越相交与否是01形式,考虑bitset优化存储条件一状态,条件二因为n比较小直接存int就好。这个题比较麻烦的是跨越相交的判定,即两个点连线经过某个矩形的边或顶点。需要一点耐心,注意多点共竖直或水平线的特殊情况即可。
1006 BBQ
大分类讨论,这里dp[i]表示到i为止即[1,i]通过改、增、删能形成合法序列的最少步数。
分类先区分是否出现最后形成的长度为4序列是否用到原序列中的两个相同字母。
不用时转移比较简单:dp[i]=min(dp[i-1]+1,min(dp[i-3],dp[i-4])+2)
再考虑用,又分为是否是与i这个位置的字母相同,不相同形式如b_b_a(下面都用下划线_代表任意序列),考虑是否使用上个a,又分为xb_b_a和a_b_b_a,前者比后者多一个修改的操作。
相同形式如a_a_a_a、a_a_a、a_a,对于a_a_a_a直接删中间字母即可,a_a_a与a_a修改中间或两侧字符或增加两侧字符即可。
但需要注意上面每个情况是都要考虑的即if...if关系而非if...else if关系。
1007 Count Set
排列性质注定成环,题意转化为每个环中取一些不相邻的点,问取k个的方案。
长为n的环取k个点的方案数为C(n-k,k)*n/(n-k)(这里k+k<=n,否则方案为0)。证明可以先考虑链形式,从n个点取k个可以视为从n-k+1中任意取k个,再用剩下k-1个插空。即C(n-k+1,k)。对应环形式,可以通过选1与否断环成链,之后就与链状相同辣~
最后对应答案计数,可以发现总共的环可以比较多,但点数不大,因此想到类似于哈夫曼编码的合并方式,套NTT解决即可~
1010 Bragging Dice
签到到,不看了叭~
1012 Buy Figurines
签到到,不看了叭~