CSP-S Day 2模拟赛游记&&题解

Day 1

什么?今天要比赛?毫无心理准备,害怕场上板子打不出来。

果断开题。

A是大水题,切掉。测了一下大样例,过了,就没有多管。

B貌似并不难,直接 d p dp 即可,期望得分 70 70 分。

然后看C,我们可以直接 O ( k 2 ) O(k^2) 暴力,另外特判一下链的情况即可。期望得分 80 80 分。

看来 r k 1 rk1 是我啦!开心……

待会儿测大样例有你好受的

B B 大样例没过,而答案却偏小?什么鬼?

并不慌地自造了一个样例,果然没过。经过简单的检查,发现——本题一个人不能被多次援救!如果你援救了同一个人正好 k k 此,那你会认为所有人都被援救了!

所以显然简单 d p dp 不行。经过简单的思考,开始打暴力。

暴力打了 20 20 分钟,代码才写了 40 40 行(太菜了),于是删掉了暴力代码,去看 T 3 T3

反正没事, C C 应该没什么问题, 100 + 0 + 80 = 180 100+0+80=180 应该也有一个好名次。

但是 C C 又炸了!

什么鬼啊,回去看了一眼,立即发现——

没有正确特判那两个条件。

然后在草稿纸上画了半小时,无果,放弃。

回去只好搞 T 1 T1 ,并没有发现什么问题。最后,难受地交了。

我太菜了, r k 1 rk1 永远不是我了

期望得分: 100 + 0 + 0 = 100 100+0+0=100
实际得分: 60 + 0 + 0 = 60 60+0+0=60
( r k 1 rk1 ,只不过是倒数的)

T M TM 不知道我在干啥!!!

唉,如果要比菜的话,那我能吊打天下所有人。

Day 1.5

g h gh 巨佬讲题。

T1

我们考虑开桶。对于每一个 i i ,我们在桶中找到是 i i 倍数的数有多少个,记这个值为 v i v_i ,显然这些数的最大公约数一定不小于 i i ;然后,对于每次询问的值 k k ,我们只需要找到 v i v_i 不小于 k k 的所有 i i 中的最大值,我们可以通过简单的预处理完成。时间复杂度为调和级数,时间复杂度 O ( m l o g m ) O(mlogm) ,其中 m = m a x 1 i n a i m=max_{1≤i≤n}{a_i}

这不就是我思路吗?

于是,怒喊改分数。讲课的 g h gh 神犇看了看我的代码,接着说了一句话:

c o u t cout 没有 p r i n t f printf 快啊”

看了一眼我的代码,发现竟然sb地用cout输出了 1 0 6 10^6 个数?!!快读记住了,快输却忘记了!还有谁比我菜???!!!

心态炸了,唉……

T2

对于每一个 d i d_i ,我们跑一遍 D i j k s t r a Dijkstra 。然后,我们就可以直接上 d p dp 了。

d p dp 状态转移就是状压的套路式:

状态设计: d p x , s t a t e : dp_{x,state}: 目前到了 x x 这个节点, s t a t e state 表示各个节点是否到达过的二进制状压数。

状态转移: d p v , s t a t e = d p u , s t a t e + c n t ( s t a t e ) × d i s u , v dp_{v,state}=dp_{u,state}+cnt(state)×dis_{u,v} ,其中 c n t ( s t a t e ) cnt(state) 表示在二进制数 s t a t e state 1 1 的个数, d i s u , v dis_{u,v} 表示 u u v v 的最短路径的长度。

总时间复杂度 O ( k ( n + m ) l o g m + 2 k k 2 ) O(k(n+m)logm+2^k k^2)

听完之后茅塞顿开。唉,这么水的题都做不出来了,要 T G 4 = TG 4= 预定了。

T3

对我表示无语。

首先,在考场上写了 T 3 T3 链的部分分,特别好写,前缀和维护 30 30 行写完。但是,犯了一个 s b sb 错误——每次我们单点修改的是节点 m i n ( u , v ) min(u,v) ,而不是 u u !

然后,听了 g h gh 巨佬讲题。

我们可以发现,对于一条链 u , v u,v ,能够扩展出这条链的链一定走了 l c a ( u , v ) lca(u,v) 的到 u , v u,v 的子边。我们每次单点修改即可。

考虑查询,假设我们枚举到的链是 ( u , v ) (u,v) ,那么所能扩展出来的节点数量就是 u u v v 的路径上各边权之和,这个显然可以用前缀和 O ( n ) O(n) 预处理+ O ( 1 ) O(1) 查询完成。

总时间复杂度 O ( m l o g n ) O(mlogn) ,若用 T a r j a n Tarjan L C A LCA ,可以将时间复杂度优化为 O ( n + m ) O(n+m)

Day 2

总结一波。

本场比赛中途过于骄傲,自以为已有 250 250 分(话说我真的好二五)。事实上,思路都是胡扯,另外 T 1 T1 还忘记了卡常,sb地使用了 c o u t cout

想吃屎,唉

猜你喜欢

转载自blog.csdn.net/Cherrt/article/details/108422794
今日推荐