还是基本没写什么题目,考试考到自闭,每天被吊打。
Luogu3602:Koishi Loves Segments
从左向右,每次删除右端点最大的即可。
[HEOI2014]南园满地堆轻絮
答案一定是 \(\lceil \frac{max_{1\le i < j \le n}(a_i-a_j)}{2} \rceil\)。
可以考虑一个二分答案 \(mid\),那么每个数 \(x\) 都是一个 \([x-mid,x+mid]\) 的范围。
当前面有一个 \(y\) 使得 \(y-mid>x+mid\) 时不合法。
然后答案就是最开始的东西了。
UOJ244:【UER #7】短路
可以发现路径一定对称,枚举在哪个绕半圈,之前一定每个都走过两次,每次肯定会多走前缀最小值,所以直接加上即可。
Atcoder ???:D Four Coloring
为了方便转成切比雪夫距离。
每个 \(d\times d\) 的矩阵染同样的颜色,每次换颜色即可。
Codeforces 734F:Anton and School
\((a|b)+(a\& b)=a+b\),全部加起来就可以手动解方程了。
注意还要代回去验证。
Atcoder ???:J Farm Village
模拟费用流。正确性:匹配不会交叉,所以匹配过的不会同时返悔向后匹配。
[JXOI2017]加法
二分答案之后从前往后贪心,每次选择右端点最大的区间加入。
BZOJ3709: [PA2014]Bohater
当 \(a-d>0\) 的时候,肯定是按照 \(d\) 从小到大打。
否则,因为最后的血量是一定的,那么直接倒过来向上面一样打即可。
Codeforces 720A:Closing ceremony
把左边每个人按照体力值排序。
把每个空位按照到左边的距离排序。
左边人依次选择,肯定选到右边距离最大的空位置。
然后右边随便贪心即可。
[AHOI2014/JSOI2014]宅男计划
三分最后要买的外卖数量。
然后考虑每次外卖怎么买,首先肯定是先买便宜的,买到保质期个。
那么从小到大考虑每个食物,如果能使所有次外卖的存活天数增大就买到最多能增大的天数个。
买不了了就能买则买。
BZOJ3716: [PA2014]Muzeum
可以通过倍长坐标轴使得角度变成 \(\frac{\pi}{2}\)。
然后旋转使得变成一个向右下的矩阵。
这个东西就是一个最大权闭合子图。
考虑模拟网络流(?),按照 \(y\) 从小到大加入每一个手办和警卫,插入警卫 \((x_0,y_0)\) 的时候按照 \(x,x\le x_0\) 从小到大依次流流量,流满了就删除。
BZOJ2034: [2009国家集训队]最大收益
模拟二分图最大权匹配(?)。
首先可以缩小位置的规模,每个区间(左端点小到大)向右找到第一个没有染色的点染色,这样染色过的点才有可能匹配。
然后按照权值从大到小增广,尝试每个位置,如果没有匹配就成功,如果这个位置匹配的区间右端点小于等于当前的点,那么寻找下一个;否则用这个位置的匹配去寻找(这样才更有可能找到)。
牛客Wannafly挑战赛27:E 黄魔法师
考虑用 \(2,98,14\) 这些数字构造答案。
这些数字中 \(14+2=16,14+98=112\),那么 \(14+98\) 不是完全平方数。
所以可以找到一个最小的数 \(m\),使得 \(\frac{m(m-1)}{2}\ge k\)。
全部填 \(2\),多的用 \(98\) 换,最后换个 \(14\) 即可。
UOJ143:【UER #5】万圣节的数列
首先两个位置的和相同的等差子序列无论如何都消不掉,不用管这些。
剩下的等差子序列是可以构造成没有的。
考虑对其奇偶分成两组,那么剩下的等差子序列只可能出现在每个组内。
而每个数除掉 \(2\) 后等差子序列仍然等差,所以递归处理即可。
[CEOI2011]Hotel
考虑将订单按价格从高到低排序,然后按顺序安排最便宜房间并求出收益。取出前 \(o\) 大就是答案。
安排最便宜房间可以二分+并查集维护删除。
因为如果房间有冲突,显然会满足价格最高的;如果 \(2\) 个订单对 \(2\) 个房间可以任意分配,那么不会影响答案。
注意安排的时候要求,收益大于 \(0\)。
BZOJ2124: 等差子序列
考虑枚举等差子序列 \((a,x,2\times x - a)\) 中间的 \(x\)。
如果长度不能大于 \(2\),那么就必须满足 \(a\) 和 \(2\times x-a\) 在 \(x\) 之前或之后出现。
也就是说把前面小于 \(x\) 的数的存在性写成一个 \(0/1\) 序列 \(a\),和大于 \(x\) 的数写成一个 \(0/1\) 序列 \(b\)。
那么满足 \(b\) 倒过来和 \(a\) 相等时就不会出现长度大于 \(2\) 的。
所以直接树状数组维护 \(hash\) 即可。
BZOJ 2907: 拜访神犇
枚举最后的终点,可以确定最开始的方向,分成三段,除了起点到终点的这一段以外,其它段的答案确定。
所以把间隔拿出来排序取出前 \(k\) 小即可,用线段树或者优先队列即可。