题目链接
T1
又是我在场上唯一A的一题。。。(话说的今天的题怎么比昨天难这么多啊!!!(#`O′))
一看到这题首先想了一下线段树。emmm…好像没法做,看看了数据范围,$10^5$啊,肯定是$O(NlogN)$的算法。
于是我就很傻*的把所有$logN$的数据结构都想了一遍。
。
。
。
后来,我几乎想要放弃的时候,我盯住了一个$dalao$的脸,打量了许久后,看回屏幕,发现了重要关键字求最矮的花的最大高度
,突然想到了$dalao$说过的经典语句像这种要求最小的最大值什么的,就用二分试试看
。于是,我仔细考虑了一下,难点在于二分答案后怎么进行判断。
于是,我又再次盯住那个$dalao$的脸(事实证明$dalao$这题只有$50$),思考这种区间加的操作怎么快速实现。然后然后然后,就想到了差分约束。于是我大喊一声:“牛逼!”,然后开始光速敲代码。
快交卷的时候,教练说这是$CodeForces$上的原题,我顿时震惊(○´・д・)ノ。于是,光速打了个暴力,然后开始对拍(甚至还错了),事实证明我生成数据的时候居然生成了$L=0$的数据(我真是*了)。吓得我以为我错了。
。(讲点正经的↓↓↓)
由于高度单调,所以我们考虑二分答案,重要就在于怎么对答案进行判断。于是,我们对于二分出的高度$k$与花的高度$h[i]$进行逐一判断,如果一束花的高度小于$k$,那么,我们就必须让他长到$k$,但是我们是区间操作啊!所以考虑维护一个数组$s$进行差分,记录下当前的花已经长高了多少。这样我们可以逐一判断,就算有重合的区间操作也能够考虑完全。时间复杂度为$O(NlogN)$,就可以$A$掉这题了(不要像我这么傻*地去想数据结构)。
1 |
|
T2
这算是Day2里面最难的一题了,我一看到这题就printf("6\n9\n6\n");
了(结果还有10分O(∩_∩)O)
考完后看了看官方题解
把删边操作倒过来,变成每次加边,维护直径
有一个容易证明的结论
两棵树合并后的直径,它的端点一定从这两棵树原本的直径中取
那么预处理好最终树的形态,利用LCA和并查集就行了
说的实在是太好了(你TM还能再简单点吗?(╯▔皿▔)╯)
不过这里有个很重要的思路就是把删边操作倒过来
(虽然我在考试的时候想过,但是还是不会。。。)
至于那个题解中的容易证明的结论
在下面我将给出证明
假设此树的最长路径是从s到t,我们选择的点为u。反证法:假设搜到的点是v。
1、v在这条最长路径上,那么dis[u,v]>dis[u,v]+dis[v,s]显然矛盾。
2、v不在这条最长路径上,我们在最长路径上选择一个点为p,则dis[u,v]>dis[u,p]+dis[p,t],那么有dis[s,v]=dis[s,p]+dis[p,u]+dis[u,v]>dis[s,p]+dis[p,t]=dis[s,t],即dis[s,v]>dis[s,t]矛盾。
也许你想说u本身就在最长路径,或者其它的一些情况,但其实都能用类似于上面的反证法来证明的。
综上所述,你两次dfs(bfs)就可以求出最长路径的两个端点和路径长度。
所以说两棵树合并后的直径,它的端点一定从这两棵树原本的直径中取
那么如何计算答案呢?
我们只需要对已经计算的$Ans$经行乘除操作就行,但是,可能会出现爆精度的情况。所以这个时候我们就需要用到逆元。至于什么是逆元,怎么求解逆元,则不再本题解的范围内。(如果想了解的请点我)
然后我们就可以大方的A掉这题了(再吐槽一下:你TM快100行的程序你题解就4行???)(我写的还算简短的了)(我们机房还有dalao写了180行!!)
1 |
|
T3
这算是Day2中最简单的一题了(Guest:那你怎么没A?)(我:谁让他放最后一题?!高一蒟蒻不会数学期望啊,瑟瑟发抖)
不过教练前天晚上还给我们讲了期望,说明天会考(那就是我太菜了吧)
但是很多人都没有在现场A出来啊。。。看见题目中的与答案的差值<=10^-5即视为正确。
以为妥妥过了。
可是官方(线上测试)并没有写SPJ(官方说不会用)。。。
导致很多人AC的程序都被卡掉了。(心中窃喜)
不过后来想想,woc他们怎么都会,于是我打算好好学数学了……(过几天开坑写个数学笔记)
不扯淡了,看题解吧↓↓↓
我们考虑设$f[i][j]$表示剩余$i$张红牌,剩余$j$张黑牌时的在最优策略下的期望收益。
很容易想到,$f[i][j]$肯定由$f[i−1][j],f[i][j−1]$转移而来。
同时,决策数量也很少,只有3种(别怪我,我不懂弄支持大括号)
- $f[i][j]=(f[i−1][j]+1)∗i/(i+j)$
- $f[i][j]=(f[i][j−1]−1)∗j/(i+j)$
- $f[i][j]=0$
分别对应的是
- 抽到红牌
- 抽到黑牌
- 停止游戏
这样我们很容易写出状态转移方程
然后这里还可以使用滚动数组优化
程序不长,思路也挺简单的(但是我就是没A,看来要好好学数学了)
1 |
|