前言
我必须狂喷一中:他们为毛要主办GDOI啊!害得我不能住酒店了。(其实是没什么借口请求带手机)
Day0
由于我家就在中山,并且距一中不远(大约15minutes车程),于是便没(bu)必(ke)要(neng)住酒店。
而又由于我们学校也在中山,所以我们下午还上了两节课……不过幸运的是我们班下午第二节是信息课,所以拿来临阵磨枪。我复习了一遍网络流,然后还打了JZOJ上的、名曰“狼和羊的故事”的一道题,不过WA了。
我们16:00便要出发看一波考场(这次比赛竟然还有“看考场”这种操作),不过我记得是16:10+车才姗姗来迟。
至后,我们领了胸(gou)牌、黄衣服还有一个绛红色的袋子。
回家后,我把那道网络流的题切了,这是TJ;然后又复习了能在比赛中大显神威的对拍。大约22:30 go to sleep。
Day1
我6:45 get up,然后7:20抵达一中,又花了3~4minutes走到考场,发现早到的童鞋们寥寥无几,而那群参加过的都有先见之明,全都木有早来。
为免虚度光阴,在约摸7:50的时候,我又叫lyx把他已然关机的手机给我,复习了一波扩展gcd。
然后,及至8:00,考场才给进。(早知道7:50来了!)
我点开压缩文件,点进题目,发现要输密码,于是问身边一位监考老师,他答:“现在还不知道。8:30才开始比赛。”那我就更应该7:50来了!
于是是前所未有的试机时间。我敲了个splay。
8:30,发密码纸。我一看密码:“tiandihenaiganyujunjue!66”,心说:“卧槽,这不是《上邪》中的‘天地合,乃敢与君绝’吗?!”(原谅我秀诗词)
我一看题,发现T1木有GDKOI的T1那么又丑又长,顿感身心愉悦。看完后感觉T1二分,T2感觉很诡谲,T3感觉某种神奇的数据结构,T4的话,感觉只能考虑打暴力了。
然后滚回去思忖T1,打了一点,发现不满足二分性,于是胡思乱想一通,突然灵光一闪:我们可以先求一波前缀和sum,然后枚举面积mj,而某个mj是可行的当且仅当:1.mj|sum[n];2.设
cnt=sum[n]mj
c
n
t
=
s
u
m
[
n
]
m
j
,则sum中必然要出现mj、2*mj、3*mj…cnt*mj。
于是开个布尔数组记录sum中出现的数,然后枚举mj,再枚举它的倍数。由于我们枚举的mj和它的倍数均不超过sum[n],而
sum[n]≤106
s
u
m
[
n
]
≤
10
6
,所以复杂度最多是
O(106log2106)
O
(
10
6
l
o
g
2
10
6
)
的;况且仅当mj|sum[n]时,mj才有算的必要,所以复杂度远小于上面那个数。
切完大概9:30,滚去思忖T2。我左思右想,也没想出来,反而空耗了30minutes。这时,我告诫自己:我不可能切了这题。于是滚去思忖T3。
T3的话,我想了一会维护整棵树的数据结构——LCT、链剖,但我发现如果模拟题意去维护的话,每个时刻都要对整棵树的所有节点进行修改——这样就很持矢。于是我思考暴力分。
首先,点1是小数据,纯模拟即可。
点2是一条链,我打了个树状数组去维护。
点5、6,数据满足询问操作中的“x”=1,即询问的是整棵树。这时就不免分析一下题:小明每天早上摘掉根的苹果,而其他苹果又会在下午下落一层,所以就相当于整棵树下降一层。考虑dfs一遍,将所有节点按照deep分层。那么当t=1时,询问的是整颗树;当t=2时,去掉第一层的贡献;当t=3时,去掉第二层……如果魔法师在第t天晚上让x号节点长了苹果,那么其实就相当于给第deep[x]+t层长了苹果。
打完后业已11:00+。滚回去思忖T2。我依然没想出个所以然来,不过大略想了想m=2和m=3的情况,我认为m=2时答案应该为连续的1的段数,m=3则没什么想法。
最后打了个20points的暴力,连m=2的情况也没时间打了。
大概12:00+的时候,我看了看T4,发现按照我起先的想法:暴力枚举每一条边的方向再套个tarjan怕是过不去——30points的n都≤3000,边数则最大9000000,这是要 O(29000000) O ( 2 9000000 ) 的节奏!故没打。
期望得分:100+20+40+0=160。
午饭虽说比纪中的平民饭堂好吃,但也不大敢恭维。
午休的话,则是去了办公楼5楼报告厅——其实我丝毫木有午休,而是一直在看lyx腐吃鸡和皇室——没带手机好不爽!!!
然后我发现这就是讲题的地方。15:00开讲。
T1花掉我1hour(想+打),结果讲题人ppt三页(包括题目)……
T2的话,大概就是把它转化成差分表,排个序,小的减、大的加……具体TJ戳这里。
T3,我一开始以为可能是LCT或者主席树之类的,没想到就一个扫描线+线段树!这种题我做过多少回了,竟然木有想到!!我屮艸芔茻!!!具体TJ戳这里。
T4,果然是道神仙题,需要运用NTT……
然后发成绩单了:100+20+40+0=160。感觉还是比较可以的,不过本可以多拿个10points(T2)。
夜,我感觉Day1木有数论,Day2估计会有,于是复习了一波线性求逆元、裴蜀定理、中国剩余定理。大约22:50 go to sleep,不过估计23:00+ fall asleep。
Day2
Day2就是今天了。
有先见之明,7:10a.m.才起床。不过有所磨蹭,卒致7:50+才到。所幸进入考室before 8:00。
试机时间,我快速地码了个网络流。然后看还才8:00,便又码splay。
今天竟然8:10就开考了,令我有些惊异。其时我那splay还功亏一篑,于是我就先码完了它。
首先看题。T1感觉不太能切;T2(什么鬼滑稽图,不就是树嘛!)感觉题面的那个公式有点问(when)题——里面的V当改换成S,而且样例2也有问题——第一行当输入3个数,我于是举手致意了监考老师,不过只告诉他了样例的问题;T3感觉是道神奇的数据结构题;T4的话,感觉很奇异——范围这么小,暴力似乎都能过!
然后思忖T1。思忖片刻,我发现设若求出了每条边的边权,那么余下的打个二分+spfa即可轻松解决。所以关键是计算边权。我略微感觉可能可以用Mobius反演,不过没有细想——我木有做过这么奇怪的Mobius反演,感觉不大可能,而又不想浪费时间。所以我最终选择先
O(maxai2)
O
(
m
a
x
a
i
2
)
预处理ax、ay间的答案的二维前缀和,然后每条边直接对应上,也即40points做法。
此时大概10:00,我滚去思忖T2。
T2的话,我苦思冥想,也木有想到正解,于是转向暴力分。
首先,点1范围极小,可以手玩。
点2、3,k=1,也就是说,
Ans=∑S⊆V|f(S)|
A
n
s
=
∑
S
⊆
V
|
f
(
S
)
|
。那答案就是每个子图中导出的边数和。考虑对于一条边i,它会在哪些子图里。显然,当且仅当
ui∈S∧vi∈S
u
i
∈
S
∧
v
i
∈
S
时,边i才会在S中。于是可以转化一下,
ui
u
i
和
vi
v
i
同时出现的子图数,其实就等于你将这两点固定在子图内,然后其他点可选可不选的方案数。
点4、5、6,k=2,所以
Ans=∑S⊆V|f(S)|2
A
n
s
=
∑
S
⊆
V
|
f
(
S
)
|
2
。设a、b为两条边,f(S)={a,b},则
|f(S)|2=|(a+b)|2=|a|2+2|a||b|+|b|2
|
f
(
S
)
|
2
=
|
(
a
+
b
)
|
2
=
|
a
|
2
+
2
|
a
|
|
b
|
+
|
b
|
2
。所以每一条边单独出现,则构成
|a|2=|a|=1
|
a
|
2
=
|
a
|
=
1
的贡献,计算方法同k=1;而与其他边同时出现,则分两种形态,一种两边有一个交点,一种无交点。分类讨论即可。
此时大约11:00。
我去思忖T3,感觉很不可做——朴素暴力都要
O(qn2)
O
(
q
n
2
)
,你能用什么逆天的数据结构把它优化到
O(qlog2n)
O
(
q
l
o
g
2
n
)
!
不过,这一波思索还是有所收获:考虑设构成容器的左木板为a,右木板为b。那么,设a的取值为sta[1..top],则若我们按照编号单调递增的顺序将每个木板压入此栈,横坐标也会单调递增,那么高度就必须单调递增。
可以尝试举个反例:有某个i<j,且h[i]≥h[j],但i、j都可作a的取值。这种反例可行吗?如果i<j,则x[i]<x[j],说明之后我们计算a、b横坐标之差时,x[b]-x[i]>x[b]-x[j];而h[i]又≥h[j],那肯定是i更优,所以大可不必将j压入栈中。
类似地,我们若按照编号单调递减的逆序将每个木板压入b的取值的栈,则高度必须单调递增。
那么,对于每次询问,考虑
O(n)
O
(
n
)
求出a、b的取值的单调栈,然后
O(n)
O
(
n
)
枚举一个min(h[a],h[b]),在栈中二分出相应位置,计算一下即可。
这样,时间复杂度是
O(q+query∗n∗log2n)
O
(
q
+
q
u
e
r
y
∗
n
∗
l
o
g
2
n
)
,其中query为询问数。预期能过前两个点。
打完后,业已12:00了。还剩10minutes,我弃疗了,随便翻看T4,胡思乱想了一通,根本没时间打暴力,比赛便结束了。
期望得分:40+30+20+0=90。感觉今天的题整体难度都提升了,木有签到题了。
午,又在观腐。
下午讲题依旧是13:00始。
T1的话,真tmd是个Mobius反演!早知道就乱推一波式子了!!!(不过它的推法确实有点诡谲)详细TJ戳这里。
T2,我发现计算那个“其他点可选可不选的方案数”,直接用2的次幂就行了,而我还傻逼逼地用了组合数……
T3的话,他提供的20points做法和我的不属。不过据他所述,我得到的结论应该是正确的。而100points做法竟然只用到了数组+链表!!!!!
T4,感觉比较神奇——木有用到什么高级的算法,不过我没听懂。
再次发成绩单了:20+30+0+0=50。怎么被吃了40points?!!我百思不得其解。不过,lyl大犇说复评也只是让他告诉你哪里错了而已,所以我并没有去复评。
结果
总分210,距离rank70还差35points(不必管rank71),没能进GDSOI,感觉还是比较遗憾的。似乎zhj大犇去年,也就是初一的时候参赛,都进了GDSOI;虽说今年纪中初一、二全军覆没,zhj大犇也痿了。
反思
- 以平常心对待比赛,不卑不亢,不要因为Day1略占优势而放松,也不必因为考差了而沮丧;
- 早点睡觉,养足精神;
- 别总想切题,宜先打完会打的暴力,以得分为主;
- 要打打对拍,学以致用,以免再次出现Day2这种莫名其妙的被吃40points的情况。