NanoApe's Blog

既是咸鱼又是辣鸡

【Plan B】#17

NanoApe posted @ 2016年6月29日 14:57 in 蒟蒻不做题提前退役 , 1610 阅读

50/50

update:16.07.08

3713: [PA2014]Iloczyn

双指针查找

3715: [PA2014]Lustra

每个维排序找出所有点的范围

3721: PA2014 Final Bazarek

分类讨论,先取所有正数然后若和为偶数则用正奇数换负偶数或正偶数换负奇数

4292: [PA2015]Równanie

枚举 $f(n)$ 看 n 是否符合条件

4589: Hard Nim

FWT 裸题

1106: [POI2007]立方体大作战tet

直接从下到上扫一遍模拟交换即可

1131: [POI2008]Sta

找重心

1123: [POI2008]BLO

找割点,求出和割点相邻的联通块的个数

1116: [POI2008]CLO

联通块是树的话就不可以

1121: [POI2008]激光发射器SZK

水题

1112: [POI2008]砖块Klo

不断移动区间,然后维护主席树

1529: [POI2005]ska Piggy banks

缩点完看入度为 0 的点的数量

3524: [Poi2014]Couriers

主席树

1115: [POI2009]石子游戏Kam

阶梯 Nim,可知阶梯最低的是 $K_n-K_{n-1}$,只能减不能加

1098: [POI2007]办公楼biu

求反图联通块

我们可以先把全部没被确定的数扔到堆 A,每次调一个出来新建联通块并扔进堆 B,每次从 B 找出一个点通过边打标记,然后查找 A 里面的数是否有连边,有的话加入 B,用完就扔掉

2096: [Poi2010]Pilots

两个单调栈维护区间最小最大值

1113: [Poi2008]海报PLA

每次选用最小高度的海报,全部覆盖,然后分成多段递归处理(或者直接扫一遍用单调栈求

1101: [POI2007]Zap

随便莫比乌斯反演

2084: [Poi2010]Antisymmetry

回文树

2088: [Poi2010]Teleportation

所有点按和S或T相连分成两类,设为 A,B,再从剩余的点按和A或B相连的分成两类,最后分类讨论

2093: [Poi2010]Frog

首先用游标求出每个点下一次跳跃的点,然后倍增

3427: Poi2013 Bytecomputer

设 $f(x,o)$ 表示前 x 个格子以 o 结尾的最小代价

2089: [Poi2010]Monotonicity & 2090: [Poi2010]Monotonicity 2

两个单调栈

3523: [Poi2014]Bricks

每次优先用个数多的,有多个则结尾的优先,然后加一堆特判

1133: [POI2009]Kon

DP,计算漏掉了多少

4378: [POI2015]Logistyka

对于一段区间,求出大于等于s的个数,这些是能每次都选上的,剩余的选择则交给正数但是小于s的格子,用修改主席树维护即可

2085: [Poi2010]Hamsters

倍增大法好,求出从某个串到另一个串的最小代价

2072: [POI2004]MOS

两种运输方式:(Min+Max,Min)(Min+SeMin,Min,Max+SeMax,SeMin),接着 dp

2797: [Poi2012]Squarks

弄个集合维护已知数的两两乘积,先从最小的推出 a1,删掉集合新增的 a1*a1,从最小推出 a2,删掉集合新增的……以此类推求出所有数

1524: [POI2006]Pal

★搞个 Trie 然后遍历一边,每个点维护其最近且为结束结点的祖先,然后 Hash 暴力判断是否回文

3521: [Poi2014]Salad Bar

★我们考虑前缀和,很容易观察出 $[l,r]$ 满足题中的条件当且仅当 $a[l-1]$ 是 $Min(a[l...r])$,而 $a[r]$ 是 $Max(a[l...r])$

然后用单调栈求出 $l[i],r[i]$,分别表示 $a[i]$ 作为最大值最远拓展到 $l[i]$,作为最小值最远拓展到$r[i]$

然后枚举区间左端点,查询 $i-r[i]$ 之间 $l[x]<=i$ 的,就线段树

1526: [POI2005]ban- Bankomat

对于每种移动顺序弄序列自动机,枚举可能的情况,判断对于当前移动顺序合不合法

3829: [Poi2014]FarmCraft

统计每个子树最少需要额外时间

2790: [Poi2012]Distance

枚举约数更新,对于每个数维护最小值和次小值(因为要求 i!=j

2073: [POI2004]PRZ

状压

2081: [Poi2010]Beads

枚举 k 然后 Hash 判断,由调和级数可得复杂度为 $O(nlogn)$

2796: [Poi2012]Fibonacci Representation

搜索+部分记忆化

3060: [Poi2012]Tour de Byteotia

先连大于 K 的边,无论成不成环;然后剩余的能连多少连多少,只要连完不成环

2213: [Poi2011]Difference

枚举出现次数最多的字母,扫一遍,对于非当前字母则维护前缀和&其最小值,对于当前字母则统计答案

注意:一段区间内出现次数最低的字母必须出现,所以 min 的维护要延迟更新,于是多开个数组

3834: [Poi2014]Solar Panels

考虑枚举 gcd,那么 $[a,b]$ 和 $[c,d]$ 两个区间内存在 $n$ 的倍数当且仅当 $floor(b/n)>floor((a-1)/n)$ 且 $floor(d/n)>floor((c-1)/n)$,然后枚举商就可以了

3831: [Poi2014]Little Bird

从后往前考虑,用单调栈来维护,相同代价的取高度较小的

2276: [Poi2011]Temperature

单调队列

2789: [Poi2012]Letters

一一对应后求逆序对

1510: [POI2006]Kra-The Disks

每个位置求序列自动机

1537: [POI2005]Aut- The Bus

二维偏序

2795: [Poi2012]A Horrible Poem

对于每个询问,枚举长度的约数然后 Hash 判定

(剪枝:求各个字母出现次数的 gcd 后再枚举约数

2083: [Poi2010]Intelligence test

怎么又是序列自动机

2086: [Poi2010]Blocks

全部减 k 完变成找总和非负的最长区间,顺序扫一遍得到单调栈然后枚举右端点扫一遍

1122: [POI2008]账本BBB

枚举最终的序列以哪个点开始,那么从这个点往后的最小前缀和可以用单调队列预处理出来,但是这样最后总数不一定满足要求,为此还要将最左的-1改成+1,或者将最右的+1改成-1,可以 $O(n)$ 求得


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter