开坑了啦啦啦..

写在前面的0.0..

poi糊做..
给自己挖一个无尽的深坑..


开坑咯

来看看做了几题..:

58/?
##poi2015

[2016.8.25] Kinoman
算是水题吧..
先暴力搞个数组表示1~i这段区间的收益
然后从1往n推,只会影响到inext[a[i]]-1,next[a[i]]next[next[a[i]]]-1
用线段树维护这个数组就好了..

[2016.8.27] Logistyka
用splay维护整个数列.. 以权值为下标..
记整个数列大于等于\(s\)的有\(tot\)个,小于\(s\)的数的总和为\(sum\)
1.如果\(tot>c\),那么肯定可以操作
2.如果\(sum\geq(c-tot)\times s\),那也可以操作
3.如果\(sum<(c-tot)\times s\),那就不行了

[2016.8.27] Pieczęć
暴力搞搞就行了

[2016.8.29] Myjnie
把所有的c离散化
f[i][j][k]表示i~j区间内最小值为k的最大收益
g[i][j][k]表示max(f[i][j][k...m])
h[x][i]表示经过x的区间有多少个
那么递推就是f[i][j][k]=max(g[i][x-1]+g[x+1][j]+h[x][k]*val[k])
然后第二问就随便搞搞

[2016.8.29] Wilcze doły
左右指针搞搞..
单调队列维护一下最大值0.0..

poi2014

[2016.8.30] Salad Bar
用单调栈处理一下每个点往左最多拉多少,往右拉多少..
再用线段树维护一下最左的位置就好了..

[2016.8.30] Hotel
一开始yy了一个好水的dp..
然后就爆空间了0.0.. 数据结构题做多了(逃)
%%%liao
枚举每个点啊.. 就是这个东西多了个n的空间0.0..
然后计算跨过这个点的方案数就行了..

[2016.8.30] Bricks
有个贪心的做法,就是每次都取剩余最多的那个颜色的..
然后随便搞搞..
tips:如果某颜色只有一个,但是前后都是这个颜色,那会怎么样呢0.0..

[2016.8.31] Couriers
比较裸的一道主席树吧0.0..
每个节点维护子树内的个数和,然后每次再问一下这个个数是否大于(r-l+1)/2就可以了..

[2016.8.31] Card
用线段树维护f[0...1][0...1],表示这个区间左端点正反面右端点正反面能否成立..
然后随便搞搞就行了..

[2016.9.1] Around the world
倍长一段,破环成链
\(next_i\)记录\(i\)最远到达位置
优化一下,在搜索过程中像并查集的方法压缩路径..

[2016.9.1] Criminals
记录每个点往左和往右最近拉到的点
维护后缀颜色最初出现位置的最小值..
\(O(n)\)扫一遍就好了..

[2016.9.2] FarmCraft
按照题意,就是所有点只能走一次,那么对于一个点x,我们只需要安排他的子树的遍历顺序即可..
那么作如下考虑:
定义遍历某节点\(x\)的子树的时间为\(f_x\),最短安装时间为\(g_x\)
那么对于某个安排顺序,有且仅当:
\(max(s+g_i,s+f_i+g_j)<max(s+g_j,s+f_j+g_i)\ (j+1=i,s=\sum\limits_{k=1}^{i-1}f_k)\)
此时会产生异议,\(i\)应该放在\(j\)的前面
由于\(s+f_i+g_j>s+g_j,\ s+f_j+g_i>s+g_i\)
所以我们只需要看\(f_i+g_j<f_j+g_i\)
所以:\(f_i-g_i<f_j-g_j\)
那么就把\(x\)的所有子节点按照\(f_i-g_i\)排个序就好了..

[2016.9.2]Freight
比较清晰的思路:最优方案一定是一段人过去然后立刻回来..
定义\(f_i\)\(i\)回到原点的最短时间,\(T_i\)\(i\)的最早出发时间..
然后搞一个递推方程:
\(f_i=min(max(f_{j-1}+S+i-j,T_i+S)+S+i-j)\)
然后再化简一下:
\(f_i=min(max(f_{j-1}-j,T_i-i)+2(S+i)-j)\)
\(g_i=f_i-(i+1)\),很容易看出\(g\)是单调不降的,那么我们二分找一个点\(p\),使得\(g_{p...i-1}>T_i-i\),然后以\(p\)为分界线在两边搞搞,用线段树维护一下就行了..
该算法复杂度为\(O(nlogn)\)
tips:用单调队列可以把时间下降到\(O(n)\)

[2016.9.2] Little Bird
用单调队列随便搞搞..

[2016.9.3] Rally
新建\(S\)\(T\)\(S\)连到所有点,所有点连到\(T\)..
\(f_i\)记录从\(S\)\(i\)的最长路,\(g_i\)记录从\(i\)\(T\)的最长路
那么一条\(x\)\(y\)的边的贡献就是\(f_x+g_y\)
然后按照拓扑序访问\(x\)
删去连到\(x\)的边,求其余边的最大值(这个用线段树维护),加上\(x\)连出去的边..

[2016.9.3] Solar Panels
如果某个\(k\)是成立的,当且仅当:
\(\lfloor\dfrac{a-1}{k}\rfloor<\lfloor\dfrac{b}{k}\rfloor\)\(\lfloor\dfrac{A-1}{k}\rfloor<\lfloor\dfrac{B}{k}\rfloor\)
然后用分块搞搞\(\lfloor\dfrac{a-1}{k}\rfloor\)\(\lfloor\dfrac{b}{k}\rfloor\)\(\lfloor\dfrac{A-1}{k}\rfloor\)\(\lfloor\dfrac{B}{k}\rfloor\)就可以了..

[2016.9.3] Supercomputer
首先我们想到最优策略肯定是
(1)如果某一层都不超过\(k\)的话我们肯定是拿整一层..
(2)如果某一层超过了\(k\),就要由下面的来补
定义\(sum_i\)为层数大于\(i\)的点数个数
那么可以清晰看到:\(ans=max(i+\lceil\dfrac{sum_i}{k}\rceil)\)
然后化简一下就可以用斜率来做了啊0.0..

[2016.9.5] Ant colony
从食蚁兽埋伏的边往叶子节点bfs,记录到每个点的上限\(up\)和下限\(down\)
如果某时刻某个点的\(down\)比最大的蚂蚁群都要大,那么就不用往下搜了..

[2016.9.5] Tourism
定义一个\(3^{10}\)的状态表示\(x\)到根的状态
\(0\)表示选了
\(1\)表示没选 不满足
\(2\)表示没选 满足
然后从上往下统计从根到\(x\)的状态\(S\)所需的最小花费
再从下往上统计从根到\(x\)的状态\(S\)并且\(x\)的子树全部满足的最小花费
然后随便乱搞就可以了..

poi2013

[2016.9.6] Inspector
%%%Claris
多组数据满满都是坑啊0.0..

[2016.9.7] Tales of seafaring
想到一个很贱的做法,就是从\(x\)走到\(y\),然后再走出来走进去走出来走进去..
那么就和奇偶性有关了..

[2016.9.7] Bytecomputer
举几个栗子就可以得到:最终数列也只可能有{-1,0,1}三种元素..
然后就dp咯,\(f_{i,0...2}\)就表示到\(i\)\(0..2\)的最小花费咯..

[2016.9.8] Taxis
先留一个大于等于\(m-d\)的车..
然后从大到小贪心就好了..

[2016.9.8] Tower Defense Game
此题只要输出任意小于等于\(k\)的方案就可以了.. 掌握一门外语是有多重要..
现在选择某个点就相当于以前选择某个点周围的所有的点.. 那这个绝对不会亏..
乱搞即可..

[2016.9.8] Triumphal arch
二分一下,然后用\(f_i\)表示要走到\(i\)这棵子树至少要先染色多少个点..
递推方程就是\(f_x=max(\sum (f_y+1)-K,0)\)

[2016.9.9] Take-out
把白的标为\(1\),把黑的标为\(-K\)
统计一下前缀和就可以发现,相邻两个相同的距离一定等于\(K+1\)..
然后乱搞即可..

[2016.9.9] Polarization
第一问答案就是\(n-1\)..
第二问的话,先找个重心,那么它的任意一棵子树肯定是全部指向它或者远离它..
然后\(01\)背包,用bitset优化就好了..

poi2012

[2016.9.12] Distance
\(sum_i\)表示\(i\)的质因数总数,那么\(d(a,b)=sum_a+sum_b-sum_{gcd(a,b)}\)
那么对于一个\(a\),枚举一个\(gcd(a,b)\),就去找最小的\(sum_b\)
预处理这个东西就可以了..
tips:调用sqrt时间很长,下面就是本人亲测:
这里写图片描述
满满都是泪啊..

[2016.9.13] A Horrible Poem
对于每个询问,找该长度的约数进行判断就行了..
优化:
统计每个字符出现的次数,那么重复次数肯定是<=gcd(出现次数)..
然后就乱搞就行了..
三倍经验到手.. 2890 3647

[2016.9.14] Warehouse Store
贪心让库存最大,用堆维护一下乱搞就好了..

[2016.9.14] Vouchers
(别把这题想的太难,其实很水的)
乱搞..

[2016.9.16] Fibonacci Representation
每次找离该数最近的斐波那契数乱搞即可..

[2016.9.16] Tour de Byteotia
先把两端都大于\(k\)的边全部加入,因为这些都是有用的..
然后再用类似于最小生成树的方法加入其他边..

[2016.9.19] Cloakroom
\(1\leq k\leq100000\)就可以知道这道题肯定是背包什么的0.0..
\(q\)这么大也就想到肯定是离线搞搞啦0.0..
那么就把\(n\)个物品按照\(a_i\)排个序,把\(q\)个询问按照\(m_i\)排个序..
\(f_i\)表示和为\(i\)的最小\(b_j\)是多少..
背包一下就行了..

[2016.9.19] Prefixuffix
毫无素质,直接去看题解了0.0..
问题可以转化成令\(s[1..i]=s[n-i+1...n]\)并且\(s[i+1...L]=s[n-L+1...n-i]\)..
那么定义\(f_i\)为最长的\(f_i\)使得\(s[i...i+f_i-1]=s[n-i-f_i+2...n-i+1]\)..
自己推一下就可以得到\(f_{i-1}\leq f_i+2\)
那么就从\(f_{n/2}\)开始递推,用hash验证一下就好了..

[2016.9.22] Festival
为了搞这题还去学了两天的差分约束..
差分约束过后就用强连通缩点,答案就是每个联通块最远的两个点的距离之和..
因为Floyd没清空\(dis_{i,i}=0\) WA了好多发0.0..

[2016.9.22] Letters
大水题不说了..

[2016.9.25] Rendezvous
据说这叫做内向环套树..
那么就把这个内向环套树的环当做根就好了0.0..
对于每个询问给出的\(x\)\(y\),先找到它在环上的根,那么就可以判断是否可行..
如果它们环上的根相等,那么走到\(lca\)是最好的
否则再乱搞..

[2016.9.27] Well
二分答案\(k\),先搞搞如果不一定要降到\(0\)的情况最小花费
然后再枚举\(z\)的位置..
具体点就是要先算出当前该位置要减少多少才能把左(右)边拉动..
嗯,接下来就自己想了0.0..

[2016.9.28] Salaries
记录每个点最大可能的值..
那么对于某个点最大为\(i\),他能够确定当且仅当一定有\(i-1\)个数比它要小..
就可以乱搞了0.0..

poi2011

[2016.10.17] Meteors
整体二分来判断..
趁机学了一发树状数组的区间修改和区间询问..
涨姿势了..

[2016.10.18] Lightning Conductor
先考虑\(i>j>k\)的情况
化简式子可得\(p\geq \max(a_j+\sqrt{i-j})-a_i\)
然后可以发现这东西是有决策单调性的,就用单调队列维护一下..
二分解个方程差不多就可以了

[2016.10.18] Temperature
很水的尺取法.. 用单调队列维护一个单调下降的\(l_i\)

[2016.10.18] Difference
一直不知道怎么做.. 知道看了题解,问了问大神才恍然大悟
定义\(f_{i,j}\)为前缀中\(i\)的个数\(-j\)的个数的值..
那么只要维护一个前缀最小值就行了
但是只维护前缀最小值会出现相减后\(i\)的个数或者\(j\)的个数等于\(0\)的情况
所以还要维护一个次小值,然后记录最小值时\(i\)或者\(j\)的个数..

[2016.10.18] Sticks
比较水吧..
维护最长不同颜色的三根木棒就好了..

[2016.10.18] *Conspiracy
这道是一道非常好的题..
首先2-sat找到一组解,然后就会发现一个性质:
只会有一个人从左边调去右边,也只会有一个人从右边调去左边..
因为两个左边的人中间一定有边,两个右边的人中间一定没边..

接着就分三种情况讨论:1)左边一个去右边 2)右边一个去左边 3)左右一个人交换..
可以先预处理出每个人如果改变将会影响到多少人,影响的人是谁
前两种的话,只要这个人一个人也不影响就行了

后面这一种也要分三种情况讨论:
1)\(i\)\(j\)一个人也不影响..
2)\(i\)只影响\(j\)\(j\)一个人也不影响
3)\(i\)\(j\)只影响一个人且就是对方

按照酱紫还会出现一种很奇妙的状况.. 就是有可能一边会一个人都没有..
这就要好好判断了..

[2016.10.19] *Dynamite
这是一道很经典的树形DP(也可以说是贪心)的好题啊..
丢链接跑.. http://blog.csdn.net/wzq_QwQ/article/details/48881753

[2016.10.21] Inspection
挺水的吧.. 只要\(x\)的最大子树比剩余子树的和都要大就是无解的..
然后需要考虑的就是最大子树刚好等于剩余节点的时候,这种情况下开始和结束的节点是相对确定的
至于怎么搞就好好想想吧

[2016.10.23] Programming Contest
之前用zkw费用流做的,蜜汁RE..
然后发现费用也就只有那么一条边有,那就不用这么复杂了..
仔细想想分层二分匹配再统计一下答案也是可以的

poi2010

[2016.10.21] Pilots
维护两个单调队列表示最大值最小值就好了..

[2016.10.21] Antisymmetry
跑个manacher就好了..

[2016.10.21] The Minima Game
排个序,可以知道如果一个人要取肯定要取前几个大的..
递推一个\(f_i\)表示前\(i\)个数先手的最大差值

[2016.10.21] Guilds
对于一个图,找个生成树黑白染色就是一个合法解,所以不合法的只有当这个联通块只有一个点
那么随便水..

[2016.10.21] Bridges
二分答案,先建边
然后根据度数用网络流反悔就行了..

[2016.10.24] Hamsters
暴力hash搞出\(i\)\(j\)最少要多少字符就可以接上
然后倍增floyd就行了..
\(map_{i,i}\)的初始化有点小坑

[2016.10.24] Monotonicity/Monotonicity 2
大概就像最长上升子序列,分三种情况来做..
至于为什么这样做是对的,我这里有神犇的证明

[2016.10.25] Sheep
一开始想简单了,以为题目的三角形都肯定是有一边在多边形边上的..
自己还一直认为自己的\(O(nKlogK+n^3)\)做法是过不了的 的确过不了
然后%%%Claris.. 就知道了怎么dp了
md最后还智障了一发,自我认为\(1\)\(n-1\)或者\(2\)\(n\)一定要连边..
智商这么低noip都要挂啊..

posted @ 2016-10-21 11:28  Ra1nbow  阅读(194)  评论(0编辑  收藏  举报