前言
就在上个星期,我参加了北京大学在湖南长沙长郡中学举办的冬令营,然而不幸的滚粗了,在此留下姗姗来迟的总结。
日程
day -inf
NOIP结束,刚回去上课不久就要继续停课,准备wc,这段时间呢,很多人都开始进行每天的考试了,那些日子,每天考试、听讲题,晚上自己学习、复习算法,就这样,若干星期过去了。
day -2
这天我们考了最后一场模拟赛,感觉发挥一般,希望自己真正考试的时候能发挥好一些
day -1
放假了,一早去机房,发现并没有什么人,到了下午人才多一点,大概很多人都出去浪了
day 0
兴奋的我一早从学校出发,乘坐地铁到杭州火车东站,乘8点半的高铁前往湖南省长沙市,预计时间为4个小时,也就是说12点半到,然而实际呢,好像由于积雪还是列车故障什么的,直到下午5点多才到。晚上入住了宾馆之后,和伙伴们一起去边上的小吃街逛了一逛,吃了顿晚饭,然后就回宾馆休息了。
day 1
上午8点至9点是开营仪式,好像是在推销北大?(逃~)然后讲了很多和计算机有关的东西,然后就结束了。
9点半,开始数学考试,然而发现自己位置的那台电脑无法进入那个openjudge(吐槽一下,在场有好几个人出现这样的情况),cj的同学说ubantu的系统都能进去、他们都测过了,然而事实并非如此。于是我开考迟了一段时间,后来不得不延时(但是延时的时间oj不再开放,所以我选择题没有提交完)。数学考的我真的是一脸懵逼,立体几何根本不会,大题到最后没什么时间了,都好难好难的,就一道题一看就有思路,匆匆忙忙的写了证明,然后数学的考试就结束了。
下午1点半开始上机考试,这个一共持续了5个小时,下面是day1题目的总结
day1 T1
请看本题update!!!
题目大意: 给出一棵二叉树,这棵二叉树的每一个叶子节点都有一个权值(每个叶子节点权值互不相同),每一个非叶子节点都有一个概率p[i]/10000取儿子节点的的最大值,而有1-p[i]/10000的概率取儿子节点的最小值,p[i]为小于10000的正整数,求
∑
i
=
1
根
节
点
可
能
权
值
数
i
2
∗
s
u
m
[
i
]
(
s
u
m
[
i
]
是
取
到
第
i
小
的
权
值
概
率
)
m
o
d
  
998244353
\sum_{i=1}^{根节点可能权值数}i^2*sum[i](sum[i]是取到第i小的权值概率)\mod998244353
i=1∑根节点可能权值数i2∗sum[i](sum[i]是取到第i小的权值概率)mod998244353点数小于等于100000
总结: 在赛场上我一下子不知道怎么做,然后就对于每个节点都开了一个map,也就是每合并两个点的复杂度是
s
i
z
e
l
∗
s
i
z
e
r
∗
l
o
g
m
i
n
(
s
i
z
e
l
,
s
i
z
e
r
)
sizel*sizer*logmin(sizel,sizer)
sizel∗sizer∗logmin(sizel,sizer)的,有40分,然后呢,我注意到了转移的时候可以把复杂度降低,可以到
s
i
z
e
l
∗
l
o
g
s
i
z
e
l
+
s
i
z
e
r
∗
l
o
g
s
i
z
e
r
sizel*logsizel+sizer*logsizer
sizel∗logsizel+sizer∗logsizer的,于是就有了50分(多了随机数据的分数)。事后发现其实这道题可以动态开点线段树+启发式合并就好了, 那么空间复杂度就是nlogn的(注意要释放内存),时间复杂度是
n
l
o
g
2
n
nlog^2n
nlog2n的
update by 2018.11.26: 经过DreamlessDreams的提醒,更新对这一题的总结,本题可以线段树合并,复杂度为
Θ
(
n
l
o
g
n
)
\Theta(nlogn)
Θ(nlogn),而且比较好写
update by 2019.1.17:由于写这篇博客时还没有出题面,所以题目大意仅仅凭记忆(但大致做法差不多),这里附上正确题意以及题解
day1 T2
题目大意: 现在有一款游戏,角色可以出牌,牌有2种,一种是攻击牌,每张攻击牌都有一个值Xi,打出这张牌能对敌人造成Xi点伤害,另一种是加成牌,每张加成牌都有一个值Yi,打出这张牌能使之后的攻击牌效果乘Yi,现在给你若干些牌,你要在所有的牌中选择m张牌,你最多使用k张牌,求造成的伤害的最大值的期望为多少,结果模998244353,多组数据,单组数据牌小于等于3000张,牌数之和小于等于30000张
总结: 对于这道题有一个dp很好想,
f
i
,
j
,
k
f_{i,j,k}
fi,j,k表示前i张牌,取了j张牌,k=1表示最后一张存在的牌用到了,k=0表示最后一张牌未用到,那么现在又分2种情况,一种是存在的牌数量小于等于k,那么枚举两种牌取的数量就好了,否则一定是攻击牌取至少一张,加成牌尽量多取,若加成牌数量小于k,那么加成牌取完,否则加成牌取k-1张,攻击牌取1张。这题我本来很有自信,打完过样例,自信觉得能ac,但是莫名其妙被卡常成30分,我也没有办法。(然而我每组数据都会用memset清空数组,会不会是因为这个T了,逃~)
day1 T3
题目大意: 给你斗地主的规则,地主有20张牌,农民有剩余的牌(当然农民一次最多打出17张因为有两个农民),现在已知一些地主的牌,问地主其它的牌有多少种情况能使地主一定能打出“春天”,(春天是指地主打完所有牌并且农民一张都无法打出)。
总结:
出题人:九条可怜
得分情况:场上有人提交,无人得分
我当时大致看了一下题意就果断放弃
赛后题解:分类讨论
若农民没有炸弹,那么说明地主每张牌至少有1张,然后地主打出的牌农民都没有该类型或者农民比地主小,若地主打出的牌不满足这些条件,那么这样的牌最多只能有一组
若农民有炸弹,那么地主的牌一定是一些比农民大的炸弹,可能带上一写些一次能打出的牌
然后搜索即可
day1考试之后
晚上6点半考完了,我只有50+30+0顿时觉得今年冬令营滚粗了,大佬zck好像40+100+0,真疲惫
day 2
day1考完了,第二天的8点开始是第二场比赛,又是5个小时,没话说,day2题目总结
day2 T1
题目大意: 给出一张图,让你求随机算法求其最大点独立集的正确率,点数小于等于20
总结: 这道题可能是6题中ac人数最多的一题,其做法也有很多种,最优复杂度是
2
n
∗
n
2^n*n
2n∗n的,我的复杂度是
2
n
∗
n
2
2^n*n^2
2n∗n2的,不过由于实际不满,所以还是跑过了,我是
f
i
,
j
f_{i,j}
fi,j表示现在已经选随了i个点,之后一定不能选入独立集的点集是状态j(包含的点有已经选入独立集的点以及已经选入独立集的点),考虑转移,再加入一个点要么是能选入独立集内的(这些点就是状态j里面为0的点,那就可以从
f
i
,
j
f_{i,j}
fi,j转移到
f
i
+
1
,
j
∣
(
与
当
前
选
的
点
距
离
小
于
等
于
1
的
点
的
集
合
的
状
态
)
f_{i+1,j|(与当前选的点距离小于等于1的点的集合的状态)}
fi+1,j∣(与当前选的点距离小于等于1的点的集合的状态)),否则选的就是不在独立集内并且与某个已选入独立集内的点相邻的点,这样可行的点的数量是有限的,所以可以统计完直接转移,我的算法成功过去了
day2 T2
题目大意: 有一些猎人,每个猎人都有一个比重,每一次都会杀死一个猎人,杀死一个猎人的概率是这个猎人的比重除以活着猎人的比重,求第一个猎人是最后一个死的概率,模998244353,人数小于等于100000
总结: 此题我在考试过程中我打了一个30分的暴力,然后就放弃了,然后讲题中说这一题可以把所有人不管死没死都能打,那么这个概率是不变的,然后用ntt优化就好了
day2 T3
题目大意: 给出一棵有根树,若干询问,每次询问给出一个点集,求从根节点出发随机游走经过点集中每个点的期望步数
总结: 看了就不会做,于是我就写了一个点集中只有一个点的部分分(只有10分),然后正解好像是树上高斯消元,然后就没了
update by 2019.1.17:这道题需要Min-Max容斥一下,然后就可以直接树上高斯消元了(通俗来讲就是树上解方程),贴出题解
day2考完
day2只能100+30+10滚粗啦,但是好像说获得了面试资格?然后下午我就去面试了,面试碰到了3个老师(这些老师都好和善啊),然后就如实的说呗,然后最尴尬的是英语自我介绍,我支支吾吾憋不住几句,然后就尴尬结束了。
day3
上午闭幕式,还没开始的时候一直都在放CJ宣传片,然后老师讲题,很多dalao都踊跃分享思路,所有人到操场进行了合影,然后就有安慰约,每个人都有,但是实际比较有用的协议只有考的比较好的人有,然后我就50+30+0+100+30+10=220滚粗了
总结
吐槽一下,CJ的电脑编译速度很慢,有的电脑甚至编译到一半就崩溃了,好像day2还有人的电脑冒烟了~
这次pkuwc滚粗了,估计我还是应该去冬眠营吧,然后希望后面的比赛能够考好一些