2020CSP全国信息学联赛 游记
Day -4
中午打了树的直径,做了复习,下午回来看了一下例题。
晚上估计是复习
l
c
a
lca
lca等树上算法。
Day -3
中午机子坏了。
晚上没来。
Day -2
期中考试,发挥失常,数学没有AK,大概116。
中午没来,晚上来了。
不知道干啥——做USACO。
感觉要挂科。
Day -1
期中考试。英语贼简单。
其它感觉还行。
然后什么时候都没来。
期中考试感觉总体还可以
Day 0
早上在讲试卷。
不难,语文考得不错???
怎么可能???
感觉很累,看三体看疯了。
然后中午没来,下午打了球。
就感觉心情不佳。
晚上没上晚修,早写完作业就来了,被老师叫了一下(还好)。来写会游记,看看资料。
好怕呀!
注意事项(由于本人是蒟蒻,所以不会高深算法):
- 不要着急。
- 背包问题:01是倒,完全是正。
- 要多多对拍。
- 注意时间。入门组要抓紧时间,最好每道题都想到正确方法;提高组也尽力而为。
- 小心粗心等问题,最后想好再写代码。
- 不要想任何与考试无关事情。
- 背包问题输出方案,记录直接更新。
- 总方案数用01/完全。一样方法。
- 区间 d p dp dp注意好循环顺序。
- D A G DAG DAG上的 d p dp dp没打过,但是也不难,按正常 D A G DAG DAG求法再 d p dp dp。
- 树形 d p dp dp用 d f s dfs dfs或者是 d f s dfs dfs序。
- 换根 d p dp dp要思考一下,其实不难。
- 状压 d p dp dp要注意状态。
- 单调队列优化要思考。
- 哈希表的 m o d mod mod要定为质数,如果很容易重复,就用双哈希或者三哈希。
- 并查集要压缩路径。
- 可以用启发式合并提升速度。
- 堆打的时候要多在草稿纸上模拟。主要是这些数据结构不常用。
- 解决区间静态的可重复贡献问题是用 S T ST ST表,思想是倍增。
- 树状数组记得如果 d e f i n e define define时就要将 l o w b i t lowbit lowbit里面的运算打上括号,或者直接写函数。 l o w b i t ( x ) = x & ( − x ) lowbit(x)=x\&(-x) lowbit(x)=x&(−x)。
- 线段树要掌握其精髓,不要盲打。记得要开4倍空间。
- 链式前向星:最好不要用 s t r u c t struct struct,记得无向图或树要开而被空间。
- 记得 2 n 2n 2n是 n < < 1 n<<1 n<<1。
- 树的直径用两遍 d f s dfs dfs可以做完。
- 树的最近公共祖先要用倍增做,如果忘了就思考一下 d f s dfs dfs序的 R M Q RMQ RMQ问题,尽量 不要用 t a r j a n tarjan tarjan,我也不会。
- 以树的重心为根,所有子树的大小小于等于整棵树大小的一半。
- 拓扑排序记得将访问的点标记。
- 最小生成树尽量用 k r u s k a l kruskal kruskal不要用 p r i m prim prim。
- 最短路 s p f a spfa spfa不行就打 d i j k s t r a dijkstra dijkstra的堆优化。
- 强连通分量 t a r j a n tarjan tarjan不要打错。
- 网络流本质:找增广路。
- 要多思维发展。
- 多想一想高奆给我们讲的故事。
- 不会一定打暴力。
- 对拍尽量10组+。
Day 1(正式比赛日)
Before CSP-J
在本校。
很早就起了,被同学吵醒了。
打铃之前就醒了。
继续追三体。。。
然后7:00去拿身份证然后没吃早餐。
等会去吧。
感觉这天有点奇怪。。。secret
CSP-J
感觉要凉凉。。。
第一题很水,直接一个二进制搞一搞,好像9:00做完了并对拍了。
第二题想了三种方法:每个区间排序、插入排序、桶。还是打了桶,时间复杂度
O
(
600
n
)
O(600n)
O(600n)。感觉可以过。正解是对顶堆???没学过。
第三题比较难,首先打了暴力,然后就想到了用后缀树,建了后缀树之后就开始想了一个树上修改的方法,好像要树剖优化,然而我不会,一直做到10点左右。正解是预处理出是否对结果影响,然后可以的就做一些事情。
第四题没有时间,想了一种
d
p
dp
dp再重复四次,结果挂了,然后就打了
d
f
s
dfs
dfs,结果没时间打记忆化。。。
估分:100+100+50+20=270。
可能没有一等。。。自闭了
Before CSP-S
来了机房写了总结。
下午感觉要凉凉。。。
希望最难的数据结构是平衡树。
CSP-S
在上午的教室的旁边,旁边一堆高中的。
然后发了下来题目。
14:30-15:00
看题时间,其中第二题有点没看懂,最后还是懂了。
15:00-15:20
第一题不难,但是细节很多,不想推数学公式,所以打了一个暴力。
15:20-16:00
调了很久,第二个样例死活过不去。
很慌,检查了很久,最后发现把4713写成4173。
暴力总算过了。
16:00-16:30
打第二题。
从20分打到40分,结果后面想到了乘法原理。
然后就应该可以满分了,大样例过了。
时间复杂度是
O
(
n
k
)
O(nk)
O(nk)。
应该行,但是好像要开unsigned long long。
而且还要特判
n
=
m
=
0
,
k
=
64
n=m=0,k=64
n=m=0,k=64的情况,只能打表。
16:30-17:00
暴力解决第三题。
直接一个
d
f
s
dfs
dfs。
不想打了。
后来发现可以优化。
17:00-18:00
第一题打了一个常数为
1
365
\frac{1}{365}
3651的方法。
然后没有注意到某一年的10月,我挂了,从50到40。
然后想用二分,但是不会。
18:00-18:30
检查了无数遍。
After CSP-S
感觉要凉凉,luogu自测提高组150,oi题库自测普及组265。
普及T4直降15分,原因到底是什么。
提高组T2还真的毒瘤,出了三个大于long long的数据,还有一个是
2
64
2^{64}
264,选择打表。
然后自闭了。
然后拿完东西回家了。
Day 1.9
听zhy奆他普及300+,提高200+。
晚上很晚了,提高组T3感觉很水,一个类似线段树的方法想了出来。
太水了还是。
终究还是没有发挥好。
普及T4,类似我的
d
p
dp
dp方法,用
0
/
1
0/1
0/1存状态。
提高T1,数学题,但是不想打。
提高T3,直接一个线段树?
提高T4,堆/平衡树?
Day 2
自闭中。
在写作业。
今天又要回校了。
明年加油!
Day 3
学校:
普及245,提高160。
普及挂了
题解
CSP-J
优秀的拆分(power)
题目:
解题思路:
直接二进制拆分。
然后如果为
1
1
1,就输出那个位所对应的数。
如果第
i
i
i位为
1
1
1,则输出
2
i
−
1
2^{i-1}
2i−1。
如果为奇数,输出
−
1
-1
−1。
直播获奖(live)
题目:
解题思路:
假设这点前
i
i
i人要选
a
i
a_i
ai人。
则题目转为求前
i
i
i个数中的第
a
i
a_i
ai个数。
可以用桶维护。
当然也可以用对顶堆,就是建一个大根堆和小根堆。
应该可以用平衡树。
时间复杂度
O
(
600
n
)
O(600n)
O(600n)。
表达式(expr)
题目:
解题思路:
30分
直接暴力:栈。
正解
用栈建一个后缀树。
设
f
x
f_x
fx表示第
x
x
x个点改变是否影响答案。
分三种字符递归。
然后设
c
x
c_x
cx表示此子树的结果。
询问
y
y
y:
- f y = 1 f_y=1 fy=1,输出根节点 c c c的取反的值。
- f y = 0 f_y=0 fy=0,输出根节点 c c c的值。
方格取数(number)
题目:
解题思路:
设
f
i
,
j
f_{i,j}
fi,j表示从
(
1
,
1
)
(1,1)
(1,1)到
(
n
,
m
)
(n,m)
(n,m)的答案,
u
i
,
j
u_{i,j}
ui,j表示从上面来的答案,
d
i
,
j
d_{i,j}
di,j表示从下面来的答案,
l
i
,
j
l_{i,j}
li,j表示从左边来的答案。
然后转移(
a
a
a为方格上的数):
l
i
,
j
=
f
i
,
j
−
1
+
a
i
,
j
l_{i,j}=f_{i,j-1}+a_{i,j}
li,j=fi,j−1+ai,j
u
i
,
j
=
max
(
u
i
−
1
,
j
,
l
i
−
1
,
j
)
+
a
i
,
j
u_{i,j}=\max(u_{i-1,j},l_{i-1,j})+a_{i,j}
ui,j=max(ui−1,j,li−1,j)+ai,j
d
i
,
j
=
max
(
d
i
+
1
,
j
,
l
i
+
1
,
j
)
+
a
i
,
j
d_{i,j}=\max(d_{i+1,j},l_{i+1,j})+a_{i,j}
di,j=max(di+1,j,li+1,j)+ai,j
f
i
,
j
=
max
(
d
i
,
j
,
u
i
,
j
,
l
i
,
j
)
f_{i,j}=\max(d_{i,j},u_{i,j},l_{i,j})
fi,j=max(di,j,ui,j,li,j)
注意要开
l
o
n
g
l
o
n
g
long\:long
longlong。