Conspiracy | (Stage I) | (100/100) |
Lollipop | (Stage I) | (100/100) |
Lightning Conductor | (Stage I) | (100/100) |
Shift | (Stage I) | (100/100) |
Plot | (Stage I) | (100/100) |
Strongbox | (Stage II - day 0) | (100/100) |
Difference | (Stage II - day 1) | (100/100) |
Garbage | (Stage II - day 1) | (100/100) |
Tree Rotations 2 | (Stage II - day 2) | (100/100) |
Tree Rotations | (Stage II - day 2) | (100/100) |
Temperature | (Stage II - day 2) | (100/100) |
Dynamite | (Stage III - day 0) | (100/100) |
Party | (Stage III - day 1) | (100/100) |
Inspection | (Stage III - day 1) | (100/100) |
Periodicity | (Stage III - day 1) | (100/100) |
Meteors | (Stage III - day 2) | (100/100) |
Sticks | (Stage III - day 2) | (100/100) |
Programming Contest | (Stage III - day 2) | (100/100) |
Conspiracy 2-Set问题。把一个人拆成x0和x1,x0表示support team。x0和x1连边。然后如果x和y认识将x1和y0连边;否则把x0和y1连边。然后跑出一组合法解后看能不能调整,显然只能调整1个人,枚举一下即可。
Lollipop 首先找到1-x使得它们中所有数的和>要求的那个数,然后找到1后面第一个W和x后面第一个W,移过去即可或者无解。
Lightning Conductor 首先令j<i;然后再反过来做一遍。显然满足决策单调性,先找出中点的决策点然后分治解决即可。
Shift 首先固定1的位置;考虑现在把i放到它应该在的位置上,可以用a先把它搞到最上面,然后往上跳两步;重复若干次就可以放好了。最后两个数可能会出现无解的情况。
Plot 二分答案,然后贪心地找。具体可以用倍增,然后求一个类似于最小圆覆盖的随机增量法。但是直接用最小圆覆盖会被卡常数,要用二分出的那个半径去尝试覆盖所有点。
Strongbox 数论题。如果x是密码且y是密码,显然任意gcd(x,y,n)的倍数都是密码;我们现在已知x,也就是求最小的y|n且y|x,使得不存在y的倍数不是密码。此时n/y就是答案。
Difference 假设统计(i,j]中(a,b)的差,就是sa[j]-sa[i]-sb[j]+sb[i]=(sa[j]-sb[j])-(sa[i]-sb[i]),也就是维护一个[a][b]表示a和b的颜色差,那么用[a][b]的当前值-[a][b]历史最小值(合法的话)更新答案。显然每次更新后只会变26个,且只有26个可以更新答案。时间复杂度O(26N)
Garbage 把0,1那个属性不同的边连起来然后跑欧拉回路
Tree Rotations 2 统计当且节点左子节点对右子节点的逆序对数量,如果交换会变少就交换。用树状数组维护一些东西即可。O(Nlog^2N),比标称的O(NlogN)线段树合并快多了。
Tree Rotations 上一题的弱化版
Temperature 单调队列维护一下即可。
Dynamite 首先二分答案,然后贪心往里面加点。然后每个点x有三种状态:有一个距离x为t的点没有被覆盖;没有点未被覆盖且x所在子树有个点可以向外延伸长度为t;不能延伸也唯有未被覆盖的点。dfs一下即可。
Party 如果x和y没有边连,显然存在一个不再大团中,把x和y都删掉即可。
Inspection 如果去掉x后有个连通块大小超过n/2就无解;否则维护一些东西然后讨论一下即可。
Periodicity 神构造题。可以百度vfleaking的题解。
Sticks 整体二分经典题。
Programming Contest 直接费用流建图会被卡常数。。注意到它其实是一个类似于二分图的玩意,用二分图匹配的方法来跑即可。
代码戳->