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

一名参赛者分享了自己在比赛中从自信满满到遭遇挫折的心路历程,详细记录了比赛中的策略失误和技术盲点,以及赛后反思和学习经验。

Day 1

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

果断开题。

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

B貌似并不难,直接dpdpdp即可,期望得分707070分。

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

看来rk1rk1rk1是我啦!开心……

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

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

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

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

暴力打了202020分钟,代码才写了404040行(太菜了),于是删掉了暴力代码,去看T3T3T3

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

但是CCC又炸了!

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

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

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

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

我太菜了,rk1rk1rk1永远不是我了

期望得分: 100+0+0=100100+0+0=100100+0+0=100
实际得分: 60+0+0=6060+0+0=6060+0+0=60
(rk1rk1rk1,只不过是倒数的)

TMTMTM不知道我在干啥!!!

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

Day 1.5

ghghgh巨佬讲题。

T1

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

这不就是我思路吗?

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

coutcoutcout没有printfprintfprintf快啊”

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

心态炸了,唉……

T2

对于每一个did_idi,我们跑一遍DijkstraDijkstraDijkstra。然后,我们就可以直接上dpdpdp了。

dpdpdp状态转移就是状压的套路式:

状态设计: dpx,state:dp_{x,state}:dpx,state: 目前到了xxx这个节点,statestatestate表示各个节点是否到达过的二进制状压数。

状态转移: dpv,state=dpu,state+cnt(state)×disu,vdp_{v,state}=dp_{u,state}+cnt(state)×dis_{u,v}dpv,state=dpu,state+cnt(state)×disu,v,其中cnt(state)cnt(state)cnt(state)表示在二进制数statestatestate111的个数,disu,vdis_{u,v}disu,v表示uuuvvv的最短路径的长度。

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

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

T3

对我表示无语。

首先,在考场上写了T3T3T3链的部分分,特别好写,前缀和维护303030行写完。但是,犯了一个sbsbsb错误——每次我们单点修改的是节点min(u,v)min(u,v)min(u,v),而不是uuu!

然后,听了ghghgh巨佬讲题。

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

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

总时间复杂度O(mlogn)O(mlogn)O(mlogn),若用TarjanTarjanTarjanLCALCALCA,可以将时间复杂度优化为O(n+m)O(n+m)O(n+m)

Day 2

总结一波。

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

想吃屎,唉

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值