NOI 2018 Day 1
打出 GG GG
看完题感觉 A A 和都挺可做的,稍微想了想感觉都能编出来做法,就先去写 A A 了。
是个普及组并查集,几乎全场都过了,但是是多组数据。写完之后直接命令行测了测每个样例,都没什么问题就扔了。
看了看
B
B
,感觉应该先打个表。打完表发现所有满足条件的序列的最长下降子序列都不超过,然后感觉就是这个结论了。然后开始逐位确定,中间#、
idea
i
d
e
a
挂了几次,发现实际上在每个位置就是要求
fn,m
f
n
,
m
表示长度为
n
n
的排列第一个数是的方案数。
推了一会感觉有点推不出来,于是又打了个表,发现实际上就是一个类似杨辉三角的东西,不过一条边上不是
1
1
而是卡特兰数。
尝试把卡特兰数转成括号序列,想了半天没想清楚。然后随便把第行第
i−j+1
i
−
j
+
1
列的数乘上了
ij
i
j
就莫名其妙变成真的杨辉三角了。
然后得到了一个式子
fi,j=(i+j−2j−1)×(i−j+1)i
f
i
,
j
=
(
i
+
j
−
2
j
−
1
)
×
(
i
−
j
+
1
)
i
,感觉这个式子要用上还要推,只剩
2h
2
h
多了,写了个
80
80
,赶紧去写
C
C
。
题一开始想了个SAM的两个
log
log
做法,肯定过不去。不过发现可以SA做到一个
log
log
,在求
Sl…Sr
S
l
…
S
r
和
Tx…Tm
T
x
…
T
m
的最大
lcp
l
c
p
时误以为只要在
height
h
e
i
g
h
t
上找相邻的就可以了。写完调得差不多还剩
1h
1
h
,发现总是跑不出样例,然后发现
idea
i
d
e
a
又挂了,于是开始修锅。
直接在
height
h
e
i
g
h
t
上找是不对的,但是整个区间可以分成通过
height
h
e
i
g
h
t
作用的
lcp
l
c
p
和端点作用的
lcp
l
c
p
,可以在线段树上用非常复杂的二分求得这个端点,然后两边分别处理。但是这个做法根本不能写,写到只剩
20
20
分钟的时候打算弃疗改两个
log
log
。
因为要改一个
log
log
,所以之前枚举右端点的那份代码删了,然后不知道枚举左端点的代码哪里写假了,最后
20
20
分钟根本发现不了。调不出来,打出
GG
GG
。
同步赛打完估分 100+80+0 100 + 80 + 0 ,感觉凉了。
下午测评的时候才发现真的凉了: A A 题忘记清空最短路的 vis v i s 数组,得到了 5 5 分的好成绩; B B 题写完了几乎所有的部分,除了忘记拆开式子将 fi,j f i , j 化为 (n+mm)−(n+mn+1) ( n + m m ) − ( n + m n + 1 ) ; C C 题随便交了个完全错误的垃圾玩意,过了 Q=1 Q = 1 的两个点,最后只得到了 93 93 分。
感觉问题主要就出在了 C C 题挂的一次 idea i d e a : 因为这个问题导致整个时间的预判出现了问题,也没有对 A A 进行任何的检查。而 C C 题的实际做法好写简单,没有想到纯粹是因为想到一个做法就开始去写了,而没有去思考一些更简单的做法,可以说是导致考挂的直接原因。
至于别的原因,还是代码能力不行,写东西写不出来,感觉是写的时候注意力不够集中的锅。
看起来 day2 d a y 2 考 300 300 分也翻不进队线了。
还好放弃了省队名额,给安徽丢脸了。
离 IOI 还有一个半月,这样下去是要打铜的。
NOI 2018 Day 2
好像看起来真的打铜了(摔
A A 题读出了四个版本的题意,只有一个版本可做,结果 1.5h 1.5 h 才写完。
感觉 C C 题一看就不能做,于是去看 B B 。
B B 一开始一直觉得分治靠谱,过了 1h 1 h 突然发现复杂度不对,然后又花了半个小时想到了一个 分类讨论+虚树+直径+平衡树合并 的一个 log log 做法,感觉并不太能写。改成了暴力线段树合并然后开始码。
写完过了样例 1 1 ,调了调过了样例 2 2 ,调了半个小时多组数据清空过了样例 3 3 ,然后最后也没过样例 4 4 。
怎么 A A 题我用 multiset multiset 达到了和 set set 一样的效果…手残把 erase(it) erase(it) 打成了 erase(*it) erase(*it) , GG GG 。
B B 题数组开小了导致 m>50000 m > 50000 的点全挂了。在 lca lca 相同的部分和不同的部分各写了一个 bug bug ,估计同步赛也没啥分了。
C C 题怎么送了 50 50 啊,不过也没写,可能是因为是同步赛于是就心态不一样了。。
好像让名额让出了一个 D D 类集训队,赚了赚了。