模拟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]

转载于:https://www.cnblogs.com/casun547/p/11336903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值