jly 贪心
这也太难了吧。
[AGC029B] Powers of two
高桥君有 \(N\) 个写有正整数的球。第 \(i\) 个球上写的正整数为 \(A_i\)。高桥君想从这 \(N\) 个球中组成若干对,使得每一对球上数字之和都是 \(2\) 的正整数幂。
注意,同一个球不能属于多个不同的对。
请你求出最多能组成多少对满足条件的球。
sol
从小到大排序。
从大到小凑二的幂次一定是最优的,双指针取一下就好,原理就是每次消大的数更优,因为不然后面消不掉了。
CF936D World of Tank
Vitya 是一名热爱编程与解题的选手,但有时也玩游戏来放松。某日他发现一款坦克类游戏,并在一天内几乎通关,仅剩最后一关难以突破。于是他发挥程序员的优势,写程序帮助自己通关。现在请你也来试试吧!
游戏地图是一条长为 \(n\)、宽为 \(2\) 的路径(两行 \(n\) 列)。地图上部分格子存在障碍。你控制的坦克初始在坐标 \((0,1)\),目标是到达 \((n+1,1)\) 或 \((n+1,2)\)。
每一秒坦克自动向右移动一格(即 \(x\) 坐标加 1)。你可以随时按“上下箭头”使坦克立即切换车道(即 \(y\) 坐标变为 1 或 2),但不能斜着移动。如果你在某一秒恰好移动+切换车道,先移动再切换。
你也可以按“空格键”使坦克开火,摧毁当前车道上最前方未摧毁的障碍(即同一条直线上,最近的障碍)。但坦克装弹需要 \(t\) 秒,开始时未装弹,意味着第一次射击必须在第 \(t\) 秒或之后。
若某一刻坦克进入含有尚未摧毁的障碍的格子,则游戏失败。
你的目标是判断坦克能否成功通关(到达 \((n+1,1)\) 或 \((n+1,2)\)),若能,请输出一组合法的操作方案。
sol
神题。
根据一通证明,你可以发现坦克在换行前是没必要攻击的。
如图假如说我在绿色这行可以直接打到橙色这行,我是可以直接走过去的,也就没有必要去走上面这一段。
但是万一我换行是为了提前攻击蓝色呢?
正确的调整思路是从后向前,这样可以避免上面遇到的问题。
假设上图在遇到蓝色障碍之后就结束了,那么显然在橙色障碍的阶段,我们是没有必要进行提前攻击的,因为后面根本没有障碍物了。
因为橙色障碍所在的阶段不是为了提前攻击,所以如果我们在紫色路径上可以攻击到蓝色目标,我们就可以直接走过去。
同样的,因为紫色路径也不是为了提前攻击,所以我们如果绿色路径上可以攻击到橙色目标,我们也可以直接走过去。
按照这个思路,我们可以使用数学归纳法,证明出坦克的提前攻击是不重要的。
把装填炮弹看成每秒攒一点能量,然后设计就变成能量值 \(-t\)。
现在你就顺着去设计 dp,设 \(dp_{i,0/1}\) 表示在上下排的最大积累能量值。
转移显然,随便写点输出方案就过了。