题意:
二维平面内有一个图形由n(10^5)个标有0~n-1的方块组成 保证它是稳定的 即每个方块要么落在地面上 要么下面(边或点相交)有至少一个方块支撑 现在两个人轮流拆这个图形 要求拆的过程中图形仍稳定 拆下的方块上的数字会形成一个n进制的数 先手想让这个数最大 后手想最小 问最后这个数字是几
思路:
简单的贪心思路 在不毁坏稳定性的前提下 先手拿大数字 后手拿小数字 程序写的暴力会n^2造成TLE
那么我们维护一个有序队列(set维护) 这里面装着可以拆的数字 每次从里面拿走想要的数字
注意的是进入set的数字在拆之前仍要检查可行性! 因为最开始可能是_-_这种形状 那么这3个都进入set 假设拆掉了右边 即变成了_-这样 那么这时左边就不能拆了 即使它在set里
每次拆完一个数字 检查它下面的3个位置 这三个位置也许具有拆掉的可能了
PS:
使用STL要小心点 一边遍历一遍删除元素是很危险的!!!
代码:
#include
#include
#include
#include
#include
#include