Google Code Jam Round2
晚上10点开始的,开始google一直上不去,然后开了个vpn就行了。
说说我的情况吧。
P1就是某年noip普及组纪念品分组,贪心。
p2是说给你一个排列,然后每次可以交换两个相邻的数,使得最后序列变为先上升后下降的样子。(n<=1000)
一开始题目看错了,以为是交换任意两个,然后愣了半天不会,去写后两题暴力了。
(话说我Round1Cp1题目也看错了害的我逗了好久)
后来突然发现是adjacent elements。。。(《论英语学习的重要性》)
然后猜了个结论,是说将序列分成两边,分别求逆序对和顺序对,发现错了。然后继续猜,每个数取两边分别比它大的数的数量的最小值,加起来,这个做法的必要性是显然的吧。
p3是说给你一张n*m的网格图,然后上面给你B个矩形禁区,问你从y轴最下面到最上面的最大流,注意点容量为1。
B<=1000
开始无脑写了一个SAP暴力跑,发现small能在5min跑出,好感动。。。
然后想了想,觉得这种题一定就是转平面图来搞,弄了一下发现就是把矩形看成点,然后从最左到最右的最短路。但是写完发现一直和暴力对不上,然后苦苦不知原因,最后悲剧了。
(考后膜拜tourist。)
发现我两个矩形的距离求错了。囧。
P4
给你M个字符串(m<=1000,len<=100),再给个n,问将这些字符串划分成n个集合后,每个集合求一个Trie,将所有Trie的大小加起来,求最大,以及最大的方案数。
写完暴力就没管了。
(考后膜拜tourist。)
注意到,我们将所有的串建出Trie后,我们的任务就是将每个叶子分配一个颜色,使得所有点的孩子的不同颜色数<=n。容易发现最大答案就是Trie中sigma(min(sz[i],n))。
考虑方案数,对于每个点,现在我有min(sz[i],n)种颜色,并且我要将这些颜色划分给我的孩子(如果当前根也是一个串的结束,也算孩子),每个孩子拿到min(sz[son],n)种,并且还要保证每种颜色都有分配。这个可以组合数+容斥一下解决。
最后就是p1,p2写出来,p3,p4暴力分。总分50分貌似就是卡线吧(50分的人挺多)不过由于暴力写的快,排名看起来就不像卡线的了。T-shirt骗进,不知道会不会像CC一样黄了。