【比赛日志】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)\)了……

posted @ 2021-06-17 20:48  frank3215  阅读(23)  评论(0编辑  收藏  举报