ioi2020集训队作业_IOI2020集训队作业

跟着做一下,不是自己独立思考出来的会打个$\Xi$。(然后全是$\Xi$

AGC023E

不会,再说。

AGC023F

感觉怎么写个假贪心就过了啊。

感性理解一下,肯定$0$越靠前越好,但可能出现一个子树有$0$又有$1$,那怎么办呢?考虑从单个节点开始,合并出一个又一个连通块,最终合并成一棵树。记录这个连通块里的$0$的个数与$1$的个数,那么我们可以在每次合并的时候算出这次合并所产生的逆序对数。那合并的顺序是什么呢?大胆猜想是$0$的个数比上$1$的个数,然后你就过了。具体证明的话,你考虑同一个父亲的连通块们的顺序,这里若交换顺序所产生的贡献是可以直接算的,于是就发现是$0$的个数比上$1$的个数。那不同父亲呢,因为互相暂时不会影响,所以无所谓。因此照着$0$的个数比上$1$的个数降序即可。合并用并查集,找最大值用堆,没了。

AGC023D

不会,再说。

CF516D

随便写个暴力就能过。

首先一个点离树上最远点的距离是可以直接算的,就是直径两端点都算一下即可。然后观察询问次数这么小,所以乱写个$O(n)$之类的都能过吧。然后你发现把离树上最远点的距离最小的作为根之后,剩下来的单调不递减了,所以暴力扫一下就好了,用个并查集维护扫描的过程也就过了。

ARC098F

不会,再说。

AGC032E

一道只猜不证的题。

排序后,猜测存在一个分界点,满足左边之和都$

CF679E

曾经写过。

CF506C

挺有想法的贪心。

二分一个答案后,考虑时间回溯,即设每个位置的初始位$mid$,然后上升看成下降,下降变成上升,显然一个限制就是过程中必须都大于等于$0$。每次肯定是把最小的拔高,用堆维护即可。

AGC032F

不会,再说。

CF555E

不会,再说。

AGC022E

好水的一道$E$。

原本想推个性质啥的,结果发现直接在合并三个字符的转移自动机上$DP$就完事了。

CF576D

算是比较简单的一题吧。

开始胡了个缩点$+DP$的做法,然后意识到自己在模拟$floyed$,发现只要边从小往大加,然后用矩阵快速幂维护经过边数,另一方面加完所有边后,再走到$n$遍。如果这时候还没到肯定到不了,所以做完了。

AGC029F

不会,再说。

AGC039D

不会,再说。

CF639F

先边双缩点,看到$\sum$小于等于一个值想到虚树,发现就做完了。

CF506E

不会,再说。

AGC022F

不会,再说。

AGC028E

不会,再说。

CF512D

果然我也就做做$D$的水平了。

先拓扑或者$tarjan$找环缩点,那么就是一棵森林。然后对于这棵森林做个背包合并,转移就是组合数。然而找环缩点挺难写的,我一开始就写挂了。

AGC020F

这题倒还是挺好想的。

一个合法的情况,肯定是有一堆线段相交,然后合起来到了$c$。然后问题在于我们实在不知道线段的起始位置,于是可以先给线段的起始位置排个序,然后就可以$dp$出概率了。注意一些细节。

AGC037E

这题以前就补过了。

记开头的连续最小字母个数为$l$。若$s[n]$是最小字母,且以$s[n]$为结尾的连续的最小字母长度为$L$,那么$l$要和$L\times 2^k$取大。若是其他位置是最小字母,且包含这个位置的连续最小字母长度为$L$,那么$l$要与$L\times 2^{k-1}$取大。然后取所有的最小即可。

CF559E

怎么搞出了个$O(n^2)$的做法啊。

如果朝同一个方向是很好算的,把后面点的那条截掉后面那条就行了。不同方向就麻烦了,我们把这两个线段一起考虑贡献,从这个线段左端点开始计算,经过当前线段的端点处再转移,发现这个只需要维护个前缀最大值即可。

AGC039F

不会,再说。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值