2017-Sp90-team2
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
[[Image(1.png,500px)]]
== 流水账 ==
开场各自看题,感觉C能秒,讨论了一下,sub上机'''C1y19'''。yzc读了A,很sb,之后上机'''A1y24'''。发现有人过B,读了之后简单讨论了一下,yzc上机'''B1y47'''。之后感觉E是个点分治模板,cjb上机写了绝大部分,yzc把twopoint写完后发现样例不对,再读cjb发现题意错了,sub上机写G。之后yzc想好了E的树型dp,上机'''E1y109'''。此前cjb让yzc抄了H的ac自动机板子,Gwa了一发,之后cjb上机写完了H,sub再次提交'''G2y141'''。cjb调过样例获得tle,yzc上机写构造题F,'''F1y161'''。cjb决定卡一下常数,'''H2y166'''。之后sub让yzc上机写好了I的判无解,之后sub和cjb讨论了I的二分求答案,yzc上机wa,调大范围还是wa,最后决定把二分范围开到long long,'''I3y193'''。sub读了K,想了个正确性存疑的贪心丢给yzc,决定上机刚M,之后发现失败。yzc想好了线段树要维护的东西,上机wa了,之后感觉贪心有问题,叉了很久,发现之前代码有个地方写错了,改了之后又交了还是wa,之后把一个更加科学的贪心改了之后终于'''K3y263'''。最后半小时试图做D失败。最后9题rk21,SJTU 11题rk5,NTU 11题rk6。
== 总结 ==
=== chenjb ===
D学到了新姿势,E今天读错题耽误了50min很可惜,不然可能有机会做多一题,主要还是节奏输掉了。
=== oipotato ===
=== subconscious ===
== 题解 ==
* A:暴力
* B:分析表达式后建树,暴力check
* C:枚举根号内的质因数,根号外的直接扫一遍。
* D:需要先处理出去掉某一条边后,该边端点i到T的最短路径f[i]。为了求这个,我们先从T跑最短路,得到最短路树,因为如果边不在最短路树上,那么依然是最短路长度,否则的话,考虑将树上y到fa[y]该边去掉,则是在子树中取一个点,跳横挑边再往上到根,也就是dist[x]-dist[y]+edge[x,p]+dist[p],我们可以先对于每个点求出最小的dist[x]+edge[x,p]+dist[p],考虑非树边(x,p),若x在z的子树内,p不在z的子树内,则该值就可以对z的f产生贡献。我们枚举每一条非树边,对于(x,y),则将x到lca(x,y)之下的每个点都更新掉,用树链剖分实现。然后把所有的f[i]都减去dist[i]就得到真正的f[i]。最后可以二分答案,也可以从T向S跑最短路,要求更新的时候用max(d[x]+edge[p].adj,f[edge[p].adj])来更新则可以得到答案。
* E:树型dp
* F:梳子形的构造一定能够走遍所有的(奇数,奇数)的格子,从起点出发,暴力走直到走到最后一个*号。
* G:mask代表当前硬币状态,大力判定点到线段距离即可。
* H:用f[i]表示串[1..i]的合法方案数,用ac自动机来维护转移位置,先在ac自动机上走一次获得pos[i],然后从pos[i]每次直接跳到合法的转移长度,这样效率是O(n^1.5^)的。注意常数要写优秀点,不然会tle。
* I:1没有入度显然-1,f[i][j]表示以i为起点,走2^i^步能到哪些点,然后二分答案即可。
* J:
* K:显然答案是max(i下标被覆盖的次数+i-1),线段树维护即可
* L:直接计算每个状态是否合法广搜即可。两个两圆交区间求最短距离判定,求出关键点:每两圆交点,每个圆心在其他圆上的投影,每个交点在在其他圆上的投影,枚举取最小值即可。注意常数。
* M:整理只需要考虑2*2,1*2,2*1三种单点和空行即可,容斥dp。
== 补题 ==

流水账
开场各自看题,感觉C能秒,讨论了一下,sub上机C1y19。yzc读了A,很sb,之后上机A1y24。发现有人过B,读了之后简单讨论了一下,yzc上机B1y47。之后感觉E是个点分治模板,cjb上机写了绝大部分,yzc把twopoint写完后发现样例不对,再读cjb发现题意错了,sub上机写G。之后yzc想好了E的树型dp,上机E1y109。此前cjb让yzc抄了H的ac自动机板子,Gwa了一发,之后cjb上机写完了H,sub再次提交G2y141。cjb调过样例获得tle,yzc上机写构造题F,F1y161。cjb决定卡一下常数,H2y166。之后sub让yzc上机写好了I的判无解,之后sub和cjb讨论了I的二分求答案,yzc上机wa,调大范围还是wa,最后决定把二分范围开到long long,I3y193。sub读了K,想了个正确性存疑的贪心丢给yzc,决定上机刚M,之后发现失败。yzc想好了线段树要维护的东西,上机wa了,之后感觉贪心有问题,叉了很久,发现之前代码有个地方写错了,改了之后又交了还是wa,之后把一个更加科学的贪心改了之后终于K3y263。最后半小时试图做D失败。最后9题rk21,SJTU 11题rk5,NTU 11题rk6。
总结
chenjb
D学到了新姿势,E今天读错题耽误了50min很可惜,不然可能有机会做多一题,主要还是节奏输掉了。
oipotato
subconscious
题解
- A:暴力
- B:分析表达式后建树,暴力check
- C:枚举根号内的质因数,根号外的直接扫一遍。
- D:需要先处理出去掉某一条边后,该边端点i到T的最短路径f[i]。为了求这个,我们先从T跑最短路,得到最短路树,因为如果边不在最短路树上,那么依然是最短路长度,否则的话,考虑将树上y到fa[y]该边去掉,则是在子树中取一个点,跳横挑边再往上到根,也就是dist[x]-dist[y]+edge[x,p]+dist[p],我们可以先对于每个点求出最小的dist[x]+edge[x,p]+dist[p],考虑非树边(x,p),若x在z的子树内,p不在z的子树内,则该值就可以对z的f产生贡献。我们枚举每一条非树边,对于(x,y),则将x到lca(x,y)之下的每个点都更新掉,用树链剖分实现。然后把所有的f[i]都减去dist[i]就得到真正的f[i]。最后可以二分答案,也可以从T向S跑最短路,要求更新的时候用max(d[x]+edge[p].adj,f[edge[p].adj])来更新则可以得到答案。
- E:树型dp
- F:梳子形的构造一定能够走遍所有的(奇数,奇数)的格子,从起点出发,暴力走直到走到最后一个*号。
- G:mask代表当前硬币状态,大力判定点到线段距离即可。
- H:用f[i]表示串[1..i]的合法方案数,用ac自动机来维护转移位置,先在ac自动机上走一次获得pos[i],然后从pos[i]每次直接跳到合法的转移长度,这样效率是O(n1.5)的。注意常数要写优秀点,不然会tle。
- I:1没有入度显然-1,f[i][j]表示以i为起点,走2i步能到哪些点,然后二分答案即可。
- J:
- K:显然答案是max(i下标被覆盖的次数+i-1),线段树维护即可
- L:直接计算每个状态是否合法广搜即可。两个两圆交区间求最短距离判定,求出关键点:每两圆交点,每个圆心在其他圆上的投影,每个交点在在其他圆上的投影,枚举取最小值即可。注意常数。
- M:整理只需要考虑2*2,1*2,2*1三种单点和空行即可,容斥dp。
补题
附加文件
- 180322.en.pdf by chenjb
- 1.png by chenjb
- J.pdf by chenjb
- Contest_Analysis_22032018.pdf by chenjb
- Contest_Analysis_22032018.2.pdf by chenjb
- Contest_Analysis_Presentation_22032018.pdf by chenjb