考试总结 模拟$102$

考试过程

T1题意真的很恶心人,看了好久的题意,

看到环,惯性思维想着拆成2n,然后比较显然的单调栈,感觉自己一直在强制往上套,

接着发现用单调递减的栈维护,若两个点之间的点都小于等于这个点,那就算一个贡献

然后就想着2n的瞎特判,写了1h30min多,只好放弃

很不爽的来到T2,一看模拟只有20分,心里mmp地调了一会暴力,规律很显然,而且提示很明显:DP,

但由于放不下T1,只好拿到T2 40,就匆忙地写T3的拓扑DP,因为之前见过好多,所以直接写55分的暴力

然后就去调T1的暴力,最后紧紧张张的qj过了样例,然后交题,评测机很慢,

只看到了T2的11/18/18我就知道eooo凉了

不要硬上套路!!!

要把每个题都深入思考后再抉择难易!!提升拿分能力

早上我才知道T3暴力写跪了,原因是每次删点的时候计算没有清空f值

只能说明紧张度不够

只有8天了啊,现在没有紧张度?最后不就死了吗??

题解

T1「单调栈」

若两个点之间的点都小于等于这个点,那就算一个贡献。用单调递减的栈维护

考场上的想法是对的。关键是如何去避免算重和算漏。

首先有一个性质:最大值两侧绝对没有贡献

那么我们将最大值放在最左端的话,那么在2-n的序列上绝对不会有 i<j&&i作为右端点,j作为左端点的情况

所以简单来说贡献分成了两部分,正着跑单调栈计算两两的贡献,和,最大值作为右端点的贡献

细节较多推荐博客

T2「简单DP」

第一眼以为是图论??

定义f[i]表示第一次到i的步数

$$f[i+1]=f[i]+1+(f[i]-f[p[i]])+1$$

第一个+1是从i到p[i],再从p[i]到i的步数是f[i]-f[p[i]]

最后一个+1是再次到达i之后再走一步到i+1

解释一下为什么   再从p[i]到i的步数是f[i]-f[p[i]]

我们可以发现我们前进一步的前提是当前点的状态

是被遍历的偶数次,而前进过后,这一步的状态就归位

而从i到j走一个区间,1-i和1-j的状态都是未访问,所以一个区间的贡献是f[j]-f[i]

而从i再跳回p[i],的状态和 第一次从p[i]到i的状态相同

所以贡献相同了

原文地址:https://www.cnblogs.com/casun547/p/11804267.html