T1[A. 入阵曲]
60%算法
维护一下某一列的从第一行到这一行和二维前缀和
然后枚举上下左右边界,$O(n^4)$
100%算法
省掉左右边界的枚举,改为从左向右扫一边,记录总和%k的余数,并放入桶中,可以发现,如果这个值出现过,那说明这个位置的总和减去那个位置的差(即这个区间)是k的正倍数
T2
又是个贪心。。
对于一个节点,它要被覆盖,驻扎点只有是它的第k级父亲节点时可以最优,越往上越优,因为这样覆盖的就会更广,根节点特判
实现,bfs倒序枚举每个点,up找到其父节点,并且向下标记,
T3
规定没亮的为1,将原来的01序列改为一个差分数组c, c[i]=s[i-1]^s[i],所以问题转化成了如何将c数组全转为0,在原序列的[l,r]翻转,就相当与在差分序列的l,r+1 这两位进行反转
两种情况:1.同为1,可以看成两两抵消,2.一个为0,一个为1,可以看成1的移动,(同为0的没必要反转)
所以先bfs一边处理出来每两个1之间相互抵达所用的步数,走任意b[i]个距离为一步,考虑状压dp,0规定有1,所以就是0->mx,输出f[mx]