POI2012
Minimalist Security
先随便跑棵生成树出来,然后能解方程的解出来,不能的解不等式确定范围。
Fibonacci Representation
牛逼贪心题,写了个假的/kk
感觉上就是让它越小越好,然后就是这样了。
Rendezvous
没意思,暴力分讨。
Festival
牛逼题,属于是不会差分约束了。
首先这个显然是一个差分约束的形式,我们将这个差分约束的图建出来。
注意到要我们求的东西非常奇怪,是权值不同的点的个数。这个东西看上去根本没法表示。
我们考虑只有第二种情况,先把强连通缩掉,因为强连通里面的肯定一样,然后剩下的显然可以全部不一样。
考虑加上第一种情况的强连通怎么做。显然对于一个强连通分量的种类上界是一条最短路径长度最大的两个点对。但是这个东西能不能证明可以做到下界呢?
答案是可以的,我们考虑这条最长路,因为要有解所以没有负环,因此从这条最长路上权值大的点连向小的点的路径的权值和这条最长路上两个点之间的权值和不会小于\(0\),相当于这条路径没有限制。
用floyd,时间复杂度\(O(n^3+m1+m2)\)
Squarks
有趣的题目。
首先我们发现,如果能确定\(x_1\)就能确定整个序列,或者判断无解。
具体的,全部两个点对之和最小的显然是\(x_1+x_2\),就可以计算出\(x_2\)的值,然后将\(x_1+x_2\)删掉之后剩下的最小显然是\(x_1+x_3\),以此类推。
问题就变成怎么求\(x_1\)。
我们发现全部点对之和最小的显然是\(x_1+x_2\),第二小的显然是\(x_1+x_3\),也就是说我们只要确定\(x_1+x_3\)的值就可以确定整个序列。
因为如果\(a<b,c<d\),排序后的\(x\)序列一定满足\(x_a+x_c<x_b+x_d\),因此小于\(x_1+x_3\)的至多只有\(n-1\)个,暴力枚举即可。中间记得离散。
时间复杂度\(O(n^3\log n)\),因为剪枝很多所以跑得飞快。
Bidding
NFLS什么时候有交互题/fn
直接爆搜 博弈状态,是\(O(n\log ^2n)\)的。
Well
最大值最小显然先二分,然后去判定。
先不考虑要求一个为\(0\),先从左到右和从右到左把这个序列相邻的差推成\(mid\),具体的,若\(a_{i+1}>a_i+mid\),则将\(a_{i+1}\)赋值成\(a_i+mid\)。然后从右到左也这么干。
接下来考虑要求一个为\(0\),显然可以算出一个数要求为\(0\)会影响那一段,以左端点为例,就是对于每个\(i\)要求最大的\(j\)满足\(\frac{a_i-a_j}{i-j}\geq -mid\)。移项得到\(a_i+i\times mid\geq a_j+j\times mid\),可以用单调队列做。然后就好了。
时间复杂度\(O(n\log W)\)。
Distance
暴力枚举记每个约数的最小两个。\(O(n\sqrt w)\)
Tour de Byteotia
两端点都大于\(k\)的显然不删,剩下的并查集判。
Vouchers
勾八诈骗题,直接模拟小于1e6的就好了。
Cloakroom
离线,按\(A\)排序,背包算\(B\)的最小值,没了。
A Horrible Poem
直接对长度质因数分解以后哈希即可。
Salaries
本来挺好一题卡空间卡时间nm什么时候似啊
首先因为每个点都要小于父亲,所以每个点显然可以出一个上界。
因为上界小的会影响上界大的的取值,因此考虑从小往大处理,如果当前这个上界有很多点那么肯定不能直接确定,否则看看上界更小的放到哪里,如果刚好只剩一个那么就可以确定。
Leveling Ground
显然先差分,变成单点修改,让全序列变为\(0\)。
同时你需要保证单点修改的\(+a\)和\(-a\)是一样多的。\(+b\)和\(-b\)也是如此。
显然先可以exgcd解每个数的一组解出来然后微调,算出每边要\(+b\)或\(-a\)的次数。然后写个堆贪心拿出对绝对值总和最好的即可。
最后调为\(0\)之后还可以一个位置拿出一个另一个减去一个,用堆处理一下就好了。
Warehouse Store
直接反悔贪心。
Prefixuffix
猜了个错的结论然后以为KMP写挂(
首先显然我们发现可以固定前面的串不动,让后面的串转起来,具体的,如果前面的串可以分割成AB,则后面的串要求能分割成BA形式才算成功。
也就是说我们要对所有\([1,i]\)是字符串border的\(i\)算\([i+1,n-i]\)的border。
然后我直接猜了一个一定在A取最大的时候最优,然后每个包错一个点(
事实上不是这样的。设这个border的值为\(f_i\),则显然有\(f_i-2\leq f_{i+1}\),因为将\(i\)的border前后都拿掉就一定是\(f_{i+1}\)的border。
这样的形式还是不好处理,因此可以变形成\(f_{i}\leq f_{i+1}+2\),从中间往两边枚举,然后每个地方暴力哈希看是否匹配即可。时间复杂度\(O(n)\)

浙公网安备 33010602011771号