Festival | (Stage I) | (100/100) |
Letters | (Stage I) | (100/100) |
Distance | (Stage I) | (100/100) |
Rendezvous | (Stage I) | (100/100) |
Well | (Stage I) | (100/100) |
Tour de Byteotia | (Stage II - day 0) | (100/100) |
Vouchers | (Stage II - day 1) | (100/100) |
Cloakroom | (Stage II - day 1) | (100/100) |
A Horrible Poem | (Stage II - day 2) | (100/100) |
Fibonacci Representation | (Stage II - day 2) | (100/100) |
Squarks | (Stage III - day 0) | (100/100) |
Bidding | (Stage III - day 1) | (100/100) |
Salaries | (Stage III - day 1) | (100/100) |
Leveling Ground | (Stage III - day 1) | (100/100) |
Minimalist Security | (Stage III - day 2) | (100/100) |
Warehouse Store | (Stage III - day 2) | (100/100) |
Prefixuffix | (Stage III - day 2) | (100/100) |
题意bzoj和codevs上都有自己看把。。(除了bidding因为是交互题)
Festival 差分约束,然后floyd判负环。剩下的强连通分量缩点构成DAG,每个强连通分量互不影响,求出各自贡献再加起来即可。
Letters 求出第二个串每一位在第一个串对应的位置然后跑逆序对即可。
Distance 令f(i)表示i的质因数(重复算多个)的个数,显然D(i,j)=f(i)+f(j)-2*f(gcd(i,j)),对于每个数x求出它倍数中最小和次小的f(),然后查询x的时候枚举x的约数即可。
Rendezvous 显然每一个连通块是基环树,那么两个点相遇只有几种情况讨论一下即可。
Well 二分答案后可以递推得到在不满足一个数=0的情况下每个数最大是多少,然后递推就得到点i的答案了。
Tour de Byteotia 先把超过K的连在一起剩下能加就加。。证明不会。
Vouchers 暴力。由调和级数得复杂度O(NlnN)。
Cloakroom 考虑离线,按a排序,然后令f[i]表示容量为i时背包中b最小值的最大值然后比较即可。
A Horrible Poem 假设当前长度为len,它的一个质因子p,如果len/p符合条件,则len/=p。显然正确。枚举所有len的质因子即可,单词查询时间logN。
Fibonacci Representation 令fi为斐波那契第i项,若fi<=x<=fi+1,那么要么用fi+1-x要么x-fi,map下记搜即可。
Squarks 显然最小的是x1+x2,次小的x1+x3,枚举x2+x3是第几(3~n)小的,然后解出x1。假设知道x1~xk,那么就把x1~xk之间两两之和删掉,剩下最小的就是x1+xk+1。重复作就好。如果用hash就是期望O(N^3)的
Bidding 题意,有两个数x=1,y=0,每次选择1.y+=x,x=1;2.x*=2;3.x*=3,如果到某人的时候x+y>=n就输了。你需要打赢交互库。
设f[i][j][k]为当前y=i,x=2^i*c^j次时能否胜利,状态O(Nlog^2N)。然后按着对方必败的方法不断走下去即可。
Salaries 显然易得每个数必须<=多少,然后对于i如果当前<=i的未确定值只有1个且存在一个数为<=i,那么这个数就是那个未确定值。
Leveling Ground 不妨令a<b且gcd(a,b)=1。差分之后变成每次操作给一个数+a(b),另一个数-a(b),由拓展欧几里得算出一个数x需要u次a和v此b(u.v>0表示加,u,v<0表示减)。同时需要Σu=0,那么考虑对一些数u-=b,v+=a,然后用堆维护修改一个数后答案变小最多的数每次取出修改即可。
Minimalist Security 对每一个连通块定一个原点x,然后这里面的点y要么是p'y=p'x+tag,或者p'y=-p'x+tag,几种情况分类讨论一下即可。
Warehouse Store 用堆维护一下当前满足的顾客中b[]的最大值,然后要么满足当前顾客的要求;或者用当前的b[]去尝试替换最大的b[]。
Prefixuffix 显然要求最大的|A|+|B|,并且字符串满足AB.....BA的形式。枚举前面A的右边界i,设此时B右边界Pi,有Pi+1-Pi<=1然后就随便做了。
代码戳→这里
by lych
2016.5.12