【比赛日志】USACO 2020 January Platinum
日志
读题:6min,自闭。
If, over time, you submit more than one solution for a single problem, only the LAST one submitted will be graded.
∴T2:0分。
血的教训
- 数据生成器一定要写
fflush()
和fclose()
- 如果只有几分钟了,不要抱着赌一把的想法提交玄学代码:“If, over time, you submit more than one solution for a single problem, only the LAST one submitted will be graded.”
- 想清楚了再写,不要着急写(会写错一堆东西)
Problem 1. Cave Paintings
24min,想完T1,开始写代码。
感觉如果整幅图不连通的话就很难办……好像不会?
构造样例
4 9
#########
#...#...#
#.#...#.#
#########
9
5 7
#######
#...#.#
#.#...#
#.#.#.#
#######
16
5 5
#####
#...#
##..#
###.#
#####
4
5 5
#####
#.#.#
##..#
#...#
#####
8
6 7
#######
#.....#
#.#.#.#
#..#..#
#.....#
#######
9
6 9
#########
#...#...#
#.#.#.#.#
#.#####.#
#.......#
#########
17
2 2
##
##
1
10 10
##########
#.#.#.#.##
##.#.#.#.#
#.#.#.#.##
##.#.#.#.#
#.#.#.#.##
##.#.#.#.#
#.#.#.#.##
##.#.#.#.#
##########
294967268
Extra:
6 9
#########
#.#.#...#
#.#...#.#
#.#####.#
#.......#
#########
9
初步思路
先将图分为若干连通块,对每个联通块求出答案(包括没有水),乘在一起即可。
简化问题:假设就一个连通块。
求答案
初始化每一个#
的放水的方法数为\(1\)(没有水),从小到大枚举高度,考虑如何将\(k\)个原先不连通的方案数为\(a_i\)的部分合并:将新的连通块的放水方案数设为\(a'=\prod_{k}a_i+1\)即可。
37min:……想得太简单了。重新考虑怎么计算连通块。
62min:调试&测试完成。
63min:提交,6~11/15个点WA。……没想法了。
*90min:已经造出来了特殊数据,目前正在重构代码……
108min:重构完毕,找出了好多错(写得太急了……)
109min:提交,过了。
Problem 2. Non-Decreasing Subsequences
一个区间之内的答案可以:
- 直接DP求得。\(O(n^2K+Q)\)。
- 矩阵+线段树维护。\(O(NK^3+QK^3\log n)\)。
- \(\sqrt N\)分块。\(O(NK^2\sqrt N+Q(\sqrt NK+K^2))\)。空间\(O(N\sqrt NK^2)\)。
- 将询问分块。\(O(QK\sqrt N)\)。
- 分治。\(O(N\log NK^2+Q(\log N+K^2))\),空间\(O(NK^2)\)
128min:没想出来满分算法……
151min:码完暴力DP。
157min:开始码分治。
184~191min:午饭。
224min:发现数组开小了(忘记fflush
了)。\(O(QK^2)\)过大,只过了9/12个点,尝试卡常……大失败。
Problem 3. Falling Portals
132min:刚读完题,自闭……
将所有事件排序,对每个奶牛同时考虑。\(O(N^3)\)
238min:交了样例,没时间打\(O(N^3)\)了……