模拟17 题解

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]

posted @ 2019-08-11 21:49  casun547  阅读(106)  评论(0编辑  收藏  举报