退役前的做题记录5

还是基本没写什么题目,考试考到自闭,每天被吊打。

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\) 小即可,用线段树或者优先队列即可。

猜你喜欢

转载自www.cnblogs.com/cjoieryl/p/10590608.html