这道题的题意是给出一个 N × N 的正方体,这个正方体是由 1 × 1 的小正方体垒成的。然后,输入数据会给出若干个命令,这些命令都表示一条平行于某坐标轴的直线,命令的效果是让这个直线上的所有方块消失掉。最后,问消失了多少小方块。

似乎这道题原题标题犯了个小小的语法错误……

关于这道题的解法,Greenmoon55 说,可以用 vector + sort + unique 系列的方法解决这个问题,还提到 set 可能会超时超内存[GRN'11]。我想原因是插入删除过程其实是 O(logn) 的,并且使用动态内存分配频繁,各种冗余数据比较多吧。这种方法的时间复杂度是 O(n2logn).

我的解法是另一种,我使用一个数组 planes[3][N][N], 记录输入的每一条直线。在每执行一条直线的命令的时候,判断某一个方块是否已经被其它直线去掉了。所以这就降了一维,复杂度是 O(n2). 但是现场赛时,我可能会采取 Greenmoon55 的做法。

源代码

参考

原创文章,转载请注明来源:http://euyuil.com/3250/acm-icpc-2010-hangzhou-to-be-a-dream-architect/