151103的测试总结

12 篇文章 0 订阅
7 篇文章 0 订阅

第一题

【题目及题号】lions 994
【题解】
本题题意大概是说有多个狮子,给出他们的能力和年龄以及地位判定方式,每次地位最高的狮子可以吃掉地位最低的,并且消耗能力值。
狮子在保证自己能够活下来的前提下才会去尽可能地吃其他狮子,问最后哪些狮砸死掉了。
性质一:如果每只狮子都不够聪明,那么他们的死亡顺序是不变的。
性质二:死掉的狮子会到他最后一次动手的时候不动手它就活下来了。
所以我们考虑倒着做,当前秒死掉的狮子如果动过手就回到它动手的前一秒,最后记录一个无法再次返回的时间。
在这个时间之前死掉的狮子就都死掉了。

【注意事项】
因为可能在某一秒被吃掉的狮子没有动过手,然后这个时间被记录了,但是可能在这个时间之前被吃掉的狮子动过手。
所以要把所有的狮子都走一遍。

另外标算写的是SET,我写了两个堆,一个大根堆,一个小根堆。
注意判辈分的地方要重载运算,堆调整函数中的所有比较都要重载!!!

第二题

【题目及题号】king 995
【题解】
本题要求放王和车,然后就可以状压DP转移求解。
f[i][j] +=f[i-1][k];(!((k<<1)&j) && !((k>>1)&j) && !(k&j))【表示第i行国王方法状态为j】
g[i][j] = sigma(f[n][合法状态]);
DP中用到g[i][j]表示i*j的格子中国王的放法。
然后现在搜索一层车的列放法,Dp车的横行放法。
预处理出当前列的情况下,sum[i]表示总共i行的乘积。
f[i][j]表示到第i行放了j个车的方案数,然后就可以枚举前一个k的位置,然后乘上sum[i-k-1]求解。

【注意事项】
1.合法的状态要先预处理出来,对于不同的列数记录一个合法状态的右界lim。
2.暴力搜索会t,所以第二层一定要DP,不然就只能打表。
3.注意g[0][0]的矩阵应该为1,防止乘下来为0。

第三题

【题目及题号】legend 996
【题解】
本题要求修改一段区间,询问整个连续区间。
题解说暴力上线段树可以卡过。
考虑差分,用后项减去前项。
那么对于1~n+1,将1赋值成为-INF,n+1为INF即可避免出现问题。
然后现在的修改就变成了修改点l,r+1。
考虑之前产生的贡献:
询问l的前驱x,询问x的后继y,然后减掉x,y原来的贡献;
询问r的后继y,询问y的前驱x,然后修改。
注意可能区间存在重复所以要多判断一下,最后再修改l,r+1,重新计算贡献。
【注意事项】
线段树的实现方法(个人觉得非常机智)
1.对于询问前驱和后继的实现方式,对一个区间记录值不为0的区间编号最小和编号最大。
l的前驱就是[1,l-1]中的max,后继就是[l+1,n+1]的minn;
另外gjy说,前驱是本身的讨论太麻烦,直接-1询问,然后减掉自己的贡献和前驱的贡献即可。【我不懂】

标程是map。Orz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值