NOIP 2020模拟赛游记&&题解

自闭了。

游记

先看了一下所有题目,感觉难度并不是很大,大致难度是橙蓝绿紫。

开了 T 1 T1 T1,发现是一个直线方程的裸题?判了一下是否存在相同的线,否则就输出 n ( n − 1 ) 2 \frac {n(n-1)} 2 2n(n1),然后一发过了大样例。感觉很稳,实不知道有平行的情况。

开了 T 2 T2 T2,发现这是一个裸的 b f s bfs bfs序+树状数组!然后每次二分找左右端点,二分里面再套一个倍增找祖先……大力卡常,时间复杂度是 O ( n + q l o g 2 n ) O(n+qlog^2n) O(n+qlog2n),估分 100 + 100 = 200 100+100=200 100+100=200

然后测了一个大样例,没过!然后写了个暴力,开始对拍,拍出来了一个错误;然后检查了一下,很快就发现二分写挂了。然后随便改一改就过了 100 100 100组的对拍和大样例。中途检查了蛮长时间,也自闭了几次;此时已经过去了 1.5 h 1.5h 1.5h,果断开 T 3 T3 T3

看完题目,立即得到了一个性质。然后感觉像一个 d p dp dp,每次转移的时候贪心;于是用临湘交换法推了一下式子,得到了贪心准则,然后做了一个等效转化写了进代码,样例过了之后立即过了大样例。尝试Hack了几发,没有Hack成功;但是觉得自己的式子还是有一点问题,但是又检查不出来,又Hack不掉……大样例也很水,竟然是一条链。感觉不稳,先看 T 4 T4 T4

T 4 T4 T4 50 50 50分很好拿,得到那一个数组然后跑一遍KMP就可以了。不到 10 10 10分钟码完,回去看 T 3 T3 T3。重新推了七遍,发现自己贪心准则是对的!于是就开始刚 T 4 T4 T4,刚了一会儿发现只剩下不到 15 15 15分钟,于是回去测极限数据并对拍。发现自己 T 2 T2 T2 T T T……然后继续疯狂地卡常,本题卡到了 4 4 4秒多,莫名感觉到时候测会时间短一点,但是感觉拿不到满分……

最后几分钟加了个文件操作就结束了。

结束时的估分: 100 + 80 + 100 + 50 = 330 100+80+100+50=330 100+80+100+50=330
实测得分: 30 + 60 + 20 + 50 = 160 30+60+20+50=160 30+60+20+50=160
。。。。。

是这样的:
①第一题我没考虑直线的情况,于是只有输出"INF"的分;
②第二题我高估了自己的运行时间,而且自己的复杂度也是错的,正解是 O ( q l o g n ) O(qlogn) O(qlogn)的……要是卡不掉那还奇怪呢;
③第三题的式子大致正确,可只是大致。竟然以为一个节点的点权等于其 d p dp dp值再减去其所有孩子的点权之后,这不是扯淡吗……

菜得真实。
先膜不到 1 h 1h 1h AK的神犇b6e0。
再膜出题人pmt, gh, yzhang
再怼、骂人(自己)。

题解

T1

①两条线重合当且仅当 ( a 1 , b 1 , c 1 ) ( a 2 , b 2 , c 2 ) (a_1,b_1,c_1)(a_2,b_2, c_2) (a1,b1,c1)(a2,b2,c2)满足,将 ( a 1 , b 1 , c 1 ) (a_1,b_1,c_1) (a1,b1,c1)同时除以它们的 g c d gcd gcd之后得到的三元组与 ) ( a 2 , b 2 , c 2 ) )(a_2,b_2, c_2) )(a2,b2,c2)同时除以它们 g c d gcd gcd之后得到的三元组完全相同。

②两条线重合就是 ( a 1 , b 1 ) (a_1,b_1) (a1,b1) ( a 2 , b 2 ) (a_2,b_2) (a2,b2)的类似①的关系。我们可以用一个 m a p map map,或直接排序来记录一下,从 C n , 2 C_{n,2} Cn,2减去 ∑ C c n t , 2 \sum C_{cnt,2} Ccnt,2就行,这里 c n t cnt cnt表示一堆本质相同的二元组的数量。

T2

考虑 b f s bfs bfs序+树状数组。

我们对于每个节点记录下它的 b f s bfs bfs序与 d f s dfs dfs序。对于每次查询,我们二分所修改的区间在 b f s bfs bfs序意义下的左端点与右端点,然后做一遍区间查询;这里二分里面并不需要套上倍增,可以直接通过 m i d mid mid d f s dfs dfs序来进行 c h e c k check check,从而决定二分上下界的变化。

通过树状数组来维护单点修改与区间查询即可。注意这里树状数组维护的是异或和,区间异或和可以通过两个前缀和相异或来得到。

时间复杂度 O ( q log ⁡ n ) O(q \log n) O(qlogn)。注意使用 f r e a d fread fread

sto pmt orz %%%%%

T3

考虑 d p dp dp。状态设计就是以 i i i为根的子树的答案,状态转移就是要确定一个买 i i i的孩子的顺序,使得其代价最小;然后加上 i i i本身的点权。

考虑如何确定这个顺序。采用临项交换法试试看:

假设两个孩子 s 1 , s 2 s1,s2 s1,s2的初始购买顺序为 s 1 , s 2 s1,s2 s1,s2,调整后的顺序为 s 2 , s 1 s2,s1 s2,s1。假设在第一次买 s 1 s1 s1 s 2 s2 s2之前
①初始: 代价为 s u m 1 + d p s 1 sum1+dp_{s1} sum1+dps1, s u m 1 + a s 1 + d p s 2 sum1+a_{s1}+dp_{s2} sum1+as1+dps2
②调整后: 代价为 s u m 1 + d p s 2 sum1+dp_{s2} sum1+dps2, s u m 1 + a s 2 + d p s 1 sum1+a_{s2}+dp_{s1} sum1+as2+dps1

如果①不比②差,当且仅当 m a x ( s u m 1 + d p s 1 , s u m 1 + a s 1 + d p s 2 ) ≤ m a x ( s u m 1 + d p s 2 , s u m 1 + a s 2 + d p s 1 ) max(sum1+dp_{s1},sum1+a_{s1}+dp_{s2})≤max(sum1+dp_{s2},sum1+a_{s2}+dp_{s1}) max(sum1+dps1,sum1+as1+dps2)max(sum1+dps2,sum1+as2+dps1)

众所周知,
s u m 1 + d p s 2 < s u m 1 + a s 1 + d p s 2 sum1+dp_{s2}<sum1+a_{s1}+dp_{s2} sum1+dps2sum1+as1+dps2
s u m 1 + d p s 1 < s u m 1 + a s 2 + d p s 1 ) sum1+dp_{s1}<sum1+a_{s2}+dp_{s1}) sum1+dps1sum1+as2+dps1)

所以可以转化为 s u m 1 + a s 1 + d p s 2 sum1+a_{s1}+dp_{s2} sum1+as1+dps2 s u m 1 + a s 2 + d p s 1 sum1+a_{s2}+dp_{s1} sum1+as2+dps1的比较。

如果前者不大于后者,即
s u m 1 + a s 1 + d p s 2 ≤ s u m 1 + a s 2 + d p s 1 sum1+a_{s1}+dp_{s2}≤sum1+a_{s2}+dp_{s1} sum1+as1+dps2sum1+as2+dps1

去掉 s u m 1 sum1 sum1:
a s 1 + d p s 2 ≤ a s 2 + d p s 1 a_{s1}+dp_{s2}≤a_{s2}+dp_{s1} as1+dps2as2+dps1

把式子变一变:
a s 1 − d p s 1 ≤ a s 2 − d p s 2 a_{s1}-dp_{s1}≤a_{s2}-dp_{s2} as1dps1as2dps2


d p s 1 − a s 1 ≥ d p s 2 − a s 2 dp_{s1}-a_{s1}≥dp_{s2}-a_{s2} dps1as1dps2as2

所以,按照当前节点孩子的 d p s 1 − a s 1 dp_{s1}-a_{s1} dps1as1从大到小排序,从前往后就是购买的顺序,从而进行转移。注意最终要加上当前节点的点权。

时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)

T4

表示看不懂题解,听的时候听懂了后面忘了前面……

先咕一下,等看懂了再补吧(

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值