POI 2014 合集

Cards

题面

暴力一点,这题不难,硬维护点啥就行

用线段树维护,每个节点维护这个区间左面是正或反面,右面的是正面或反面能否构成一段不降序列,然后合并就是看分界点两端是否可以就行

Bricks

题面

就贪心就好啦。尽可能先放多的,如果有数目相同的,那尽可能先放尾端颜色的

Tourism

题面

是一道没见过的 dfs 树的题!

就是表明它是 dfs树的标签就是"任意两点间不存在节点数超过10的简单路径",这意味着如果建出 dfs 树,那么这棵树的深度不超过 10。因为建出 dfs 树之后可能有返祖边(莫得横叉边),并且层数是 10,这就可以状态压缩了,用 0 表示选,1 表示不选且未被覆盖, 2 表示不选且被覆盖,然后三进制转移就行。问题还有就是如果设到每个点的状态的最小花费空间会炸,所以设的是到每个深度每个状态的最小花费然后转移就行。

FarmCraft

肯定是贪心了吧。用走的时间减掉装电脑的时间给儿子排序决定走的顺序。

具体的话,就是参考这道题了吧

Freight

dp 方程的话是设 \(f_i\) 表示第 \(i\) 辆车去了回来的最短用时,\(f_{i}=\min\{\max\{a_i,f_j+i-j-1\}+2\times s+i-j-1\}\) (说实话,不难想,但是额,很容易写错的样子)

然后就是需要分类讨论,当 \(a_i>f_j+i-j-1\) ,即 \(a_i-i+1>f_j-j\) 其实可以发现这个 \(f_j-j\) 单调递增,所以用二分找到分界点 \(j\) 使得 \(a_i-i+1>f_j-j\),此时 \(f_i=\min\{a_i+2s+i-j-1\}\) 此时只需要找到最大的 \(j\), 即我们二分到的分界点。而对于 \(f_j-j\geq a_i-i+1\) 的情况,我们需要 \(f_i=\min\{f_i+i-j-1+2s+i-j-1\}\),对于 \(j\) 来说,他的影响范围就是 \(f_j-2j\) 所以我们需要在线段树维护这个东西,然后在线段树上区间最值。

这个min里套max 的好像就是 好像在你身旁 ,就是分类讨论?对于分别取的情况分类讨论

Salad Bar

这题好容易写假 O__O "…

其实第一步的转化应该是个套路,就是把 p 和 j 看作正负 1 ,然后做前缀和,很容易推出来 \(sum_{l-1}\leq sum_i\leq sum_r\)

然后我们现在要求出这样一段合法区间。

然后我的做法是枚举左端点 \(i\) ,然后用单调栈找到最远的位置保证所有右边的数大于等于左端点,然后线段树上找到最大的位置在哪里就行了。

Little Bird

对每只鸟分开算,\(f_i\) 表示飞到第 \(i\) 棵树的最小花费,\(f_i=f_j+(a_i\geq a_j)\) 然后对 \(f_i\) 影响最大的还是 \(f_j\) ,所以用 \(f\) 排序,如果 \(f\) 相等,就按 \(a\) 从大到小排序,这个排序用单调队列实现

Solar Panels

有用的 trick :如果 \(\lfloor \frac {l}{x}\rfloor<\lfloor \frac {r}{x}\rfloor\)\((l,r]\) 中有 \(x\) 的倍数。

然后直接枚举 \(x\) 就行了,所以数论分块就行了。

Solar lamps

不会转化......

转化坐标,就把坐标系转化成标准的二维坐标系,就是设转化后的坐标为 \((a_i,b_i)\) ,然后就是:\(a_i(x_1,y_1)+b_i(x_2,y_2)=(x_i,y_i)\)

这样问题就转化成了求比自己亮的早,坐标比自己小的点满不满足 \(k\) 个。

不要试图想树套树,上一个这么想的甚至开发出了非递归线段树才能在评测机心情好的时候过

整体二分,设当前二分的时间为 \(k\) 然后就看一下每个点能不能在当前时间前亮,然后对点按横坐标排序,纵坐标扔到树状数组里,然后就求一下就行。

然后二分的过程中,我记了一下前面有多少已经在左下角的点,然后再让他进到右区间。

Rally

先拓扑排序,然后找到以每个点为起点或终点的最长路径,\(f_i,g_i\),现在考虑枚举删掉哪个点,用两个集合,一个装已被删除的点,另一个装未被删除的点,按照拓扑序从小到大删点,因为拓扑序从小到大,所以删的时候入边连的点一定在已被删的集合,出边连的点一定是在未被删的集合,所以我们现在用一个数据结构维护图上的最长路,现在我们假设删掉 \(x\) ,入边连的点统称 \(a\),出边连的点统称 \(b\),现在我们删掉 \(f_x,g_a+f_x+1\),此时数据结构里的最大值就是删掉 \(x\) 的最大值,然后加入 \(g_x,g_x+f_b+1\),就把 \(x\) 扔进了已删的集合了。

Ant colony

所以就是说我还没调出来呢QAQ

就是把那条边拎出来当成两棵树,然后就是利用一下 \(\lfloor \frac {\lfloor \frac {a}{b}\rfloor}{c}\rfloor=\lfloor \frac {a}{bc}\rfloor\),算出每个点能走一下剩下的分母,然后就是在叶子节点二分看一下有没有合法的就行

upd on 10.8:我调出来了。二分写炸了。


upd on 10.4 :下午给我困麻了,主要因为昨天晚上我妈不在家,我家猫好像着急找她,然后对着入户门嗷嗷叫唤,整的我晚上睡不着觉,还怕他晚上自己开门跑了

然后今天下午就全程呆滞( ̄△ ̄;)

afbb0c7a6f96eebf08a29ab16c746fbc.jpg

posted @ 2022-10-04 22:07  cc0000  阅读(57)  评论(0)    收藏  举报