06 2024 档案
摘要:cf链接 洛谷链接 方法一 最大最小值问题我们很容易想到二分答案法。那么我们如何写出check函数呢? 对于答案x,若x-i+1<a[i],则选定怪物一定不在 i 位置左侧,即L=i; 若x-n+i<a[i],则选定怪物一定不在 i 位置右侧,R=min(R,i)。 遍历数组,如果L<=R则答案符合
阅读全文
摘要:cf链接 洛谷链接 解法一 我们观察到每一次的分段会导致后面的分段的Li+1,也就意味着整个式子的答案加上了当前下一位置的后缀和。 即我们假设后缀数组为b,如果要在 i 位置分段,此时ans+=b[i+1];因此我们很容易得出如果 i 位置的后缀和>0则分段,否则不分段。 Ps:如果b[1]<0需要
阅读全文
摘要:题解 首先,我们来学会如何判断在一系列线段中是否存在不相交线段。 我们选取所有线段中最大的左边界l_max和最小的右边界r_min,我们可以清楚的知晓当l_max>r_min的时候存在不相交线段(贪心的思想),否则不存在。 code #include<bits/stdc++.h> using nam
阅读全文
摘要:题解 dp数组的含义: dp[i]表示从i-n要删除几个数使得【i,n】的数组是优美的。 此时分两种情况: 1、删除当前位置的数,则dp[i]=dp[i+1]+1 2、不删除当前位置的数,则dp[i]=dp[i+a[i]+1] 因此转移方程为:dp[i]=min(dp[i+1]+1,dp[i+1+a
阅读全文
摘要:题解 我们只需要将每个数拆成质因数相乘的形式,然后对每个质因数累加,最后观察每个质因数出现的次数是不是数组长度的整数倍即可。 code #include<bits/stdc++.h> using namespace std; const int N=1e4+5; int a[N]; map<int
阅读全文