解题:POI 2012 Well】的更多相关文章

题面 比较明显地能看出二分来,但是检查函数很难写.对于二分出的一个$mid$,我们要让它满足在$m$次操作内令序列中存在一个为零的位置,同时使得任意相邻的两项之差不超过$mid$ 第二项的检查比较好做,我们正反各扫一遍然后把扫到的上一个数对当前数与$mid$之差取最小值,就是满足条件的最小代价 对于第一项的检查,我们发现可以将原数列修改成一段段的等差数列,这样在存在零的情况下是最优的.我们枚举这个变成零的位置,然后找出$h_l-k-l*mid>0$和$h_r-r-k*mid>0$的$l,r$,…
题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的限制仍然不好满足,但是我们的可行性dp的数组只记录了是否可行,还有利用的余地,那么以$dp[i]$记录达到$i$的所有方案中最小的$b$的最大值,查询的时候就可以判定了 #include<cstdio> #include<cstring> #include<algorithm&g…
http://www.lydsy.com/JudgeOnline/problem.php?id=2803 核心思想是利用单调性. 因为长度为L的前缀和后缀循环同构是AB和BA的形式,我们设\(f(i)\)表示A的长度为i时B的最大长度. 有一个比较易证的结论\(f(i-1)\leq f(i)+2\) 但是并不好往这个结论上想. 单哈希被卡了qwq,改成双哈希了. 时间复杂度\(O(n)\). #include<cstdio> #include<cstring> #include&l…
\(\\\) \(Description\) 给出两个长度为 \(N\) 的字符串\(S_1,S_2\),且保证两个字符串中每一个字符出现次数相同. 现在一次操作可以交换相邻的两个字符,问将 \(S_2\) 变成 \(S_1\) 最少需要交换多少次. \(N\le 10^6\) \(\\\) \(Solution\) 假如一共出现了五个 \(A\) ,那一定是按照顺序移动,即\(S_2\)中第一个出现的 \(A\) 最后一定会移动到\(S_1\)中第一个出现的 \(A\) 处. 然后就是逐一匹配…
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以记录现在的箱子位置和前缀最小值,向上枚举就行. OKR-Periods of Words 戳这 POI 2007 OSI-Axes of Symmetry 戳这 MEG-Megalopolis 树剖 or dfs序上维护前缀和. POI 2010 GIL-Guilds 按照洛谷的题面,可以发现灰点就…
题面 出现了,神仙题! 了解一点博弈论的话可以很容易转化题面:问$B$有多少种取(diu)石子的方式使得取后剩余石子异或值为零且取出的石子堆数是$d$的倍数 首先有个暴力做法:$dp[i][j][k]$表示到第$i$个为止取出来的石子数目模$d$等于$j$且剩下的石子异或和为$k$的方案数,然后就枚举转移啊=.= 发现时空复杂度好像都不能承受,不过可以尝试分析/优化一下.首先分析一波后发现时间复杂度其实是对的......只是我们需要将石子数从小到大排个序,这样一路异或下来异或到$i$时最大值不超…
昨晚各种莫名其妙卡题. 不过细看这套题还挺简单的.全是各种暴力. 除了最后一道题计算几何看起来很麻烦的样子,其他题都是很好写的吧. A. Babs' Box Boutique 题目大意是给出不超过10个的长方体,然后求怎样堆叠使得放的长方体最多. 堆叠的要求是长方体一个一个的往上放,要求接触的面,上面的面长和宽不能比下面的面大 那么每个长方体有三个面,我们就3^n枚举每个长方体使用的哪一面放的. 然后按照这些面的宽进行排序,做一下LIS即可 #include <iostream> #inclu…
啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <map> #define MAXN 111111 #define INF 1000000007 usin…
这套题..除了几何的都出了 完全没时间学几何.杯具 A,B,J 水题不解释 C.Pen Counts 这题的话 写几个不等式限制边得范围就行了 然后枚举最小边 D.Maximum Random Walk 这题的话. 正解是一个n^3的dp dp[i][j][k] 表示第i步走到第j位置最右为k的概率 然后用滚动数组搞,非常简单. 但是还有一种n ^ 2的方法. 被我在比赛中试出来的. 大概是直接记录的第i步走到最右为j的概率 #include <iostream> #include <a…
题面 入手点是每段路程中能量$e$与时间$t$的关系,$t-e$这个函数的导数对于各个路段一样,否则我们可以从导数大的一段路抽出一部分能量分给导数小的,这样会更优 毕姥爷在考场上的做法:猜一猜,然后拿python打打表,发现确实是这样的 那么可以把$e/t$化成关于每段速度$v$的一个式子 $e/t$ $=(ks(v-v')^2)/(s/v)$ 针对$v$求导 $=k(v-v')/(1/v^2)$ $=kv^2(v-v')$ 然后二分这个导数$d$,尝试反解出$v$ $kv^2(v-v')=d$…