2018.8.30

Pre

我是真的醉了3道题题题切,切完了就开始玩了,结果emmm没有AK很不爽270数组开小了1/2,我真的服了,查分数组我不开2倍是最骚的,唉被T3白嫖了……

T1

垃圾题,发现性质就很好切了

1、蚂蚁可以看做穿过彼此
2、蚂蚁的相对位置不会改变
3、蚂蚁一旦走下去就不会再和任何蚂蚁发生碰撞

令Li为每只蚂蚁的初始位置

利用性质1可以搞出T个单位时间后所有蚂蚁最后的位置(对于第i个Li,向左减向右加T)(注意Li不是第i只蚂蚁的位置)

利用性质2我们发现第1小的Li是第1只蚂蚁走了T个单位时间后的位置……以此类推只需要对Li排序就好啦!

利用性质3我们可以令T为1e10,强制所有的蚂蚁全部走下去,这样在小于0的Li的那只蚂蚁所需要走下去的的时间就是(……被和谐部分……)很显然啦!

T2

垃圾Dp我一开始还以为是贪心结果最后5秒发现有毒最后改A了

还是发现了性质:最后这个序列一定是被分成了一块一块的,且每块只与前面一块有关,并且没有贪心性(之前选择最少的合并的部署可能对之后的状况带来不利,如:6朵花,5 1 7 3 4 7,贪心输出3,但显然是答案2哦),所以Dp很显然了,定义Dp状态Dp(i)表示考虑前i个数最少需要合并多少次,那么可以由之前的某一个j转移过来对吧,其满足的条件是j+1~i所组成的块的和大于状态j中最后的块的值,只需要记录lst(j)表示Dp(j)取最优的时候j的最后一块中所有数的和;

但是有个问题,如果存在合法的Dp(j1)和Dp(j2)的值相等呢?完了到底要谁呢?是不是一定会选择lst小的那个,因为无论如何lst越小后面的状态就越可能更优(最后5分钟调出来的md一开始认为贪心贼正确),但是还有个问题,就是如果当前的状态不能被之前的任何状态所更新呢?是不是还是初值定为inf?其实不然,它最坏还是可以将前面的所有数都合并,并且形成一个可以更新别的Dp值的一个状态,lst就是1~i所有数的和,Dp值则是i-1(很显然啊),这个也是最后调试出来的(%一下自己哈哈哈哈Orz,快来%我啊)!

T3

就是这道题我数组开小了RE了3组数据难受……

不想写,二分答案再贪心check就好了,贪心地区间修改,利用差分数组O(1)修改O(n)转移啦!

还是很难受差分数组,由于i+K可能溢出1e5,所以……emmm访问无效内存……

以后只要有空间(如果不像某省首选的Day1T1的动态点分治一样的话),能开多大开多大!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值