NOIP提高组【JZOJ4788】序列
来源:互联网 发布:mac如何永久删除文件 编辑:程序博客网 时间:2024/06/13 09:04
Description
Data Constraint
我们设d[i]表示a[i]要经过多少次操作后才可到达b[i],设c[i]=d[i]-d[i-1]。那么最朴素的想法答案ans=∑ni=1Max(0,c[i]) 。但这只是每个数都不会超过自己d[i]的情况,我们还要考虑假设某个数被某个区间包含,后来又多做了4次再次返回自已要求值的情况。显然对于现在的某段区间[i,j],它多做了4次会使c[j]-4,使c[i]+4,那么我们再回想刚才的公式ans=∑ni=1Max(0,c[i]) ,我们明显想使ans最小,也就是想使max(0,c[i]+4)+max(0,c[j]-4)
1:当c[j]为1时,显然max(0,c[i]+4)肯定不会比max(c[i],0)+1更小,所以无需考虑。
2:当c[j]为2时,我们发现只有c[i]=-3时才会使答案小1,所以我们看j之前是否有c[i]=-3的数,假设有,就将答案减1,并将c[i]=-3的数量-1,紧接着我们发现c[j]-4后值为-2,所以我们将c[i]=-2的数量+1。
3:当c[j]为3时,我们发现c[i]=-3时会使答案小2,而c[i]=-2时会使答案小1,所以我们看j之前是否有c[i]=-3的数,假设有,就将答案减2,并将c[i]=-3的数量-1。假设没有,我们再看看j之前是否有c[i]=-2的数,假设有,就将答案减1,并将c[i]=-2的数量-1。
4:对于c[j]<0的情况,明显他们对当前答案的贡献为0,所以无需做改变,只需将c[j]=-2的数量或c[j]=-3的数量+1即可。
总时间复杂度为O(N)。
代码
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#define ll long longusing namespace std;const int maxn=100005;int a[maxn],b[maxn],d[maxn],n,i,t,j,k,l,x,y,ans,c[10];int main(){// freopen("data.in","r",stdin); scanf("%d",&l); while (l){ scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); for (i=1;i<=n;i++) scanf("%d",&b[i]),d[i]=(b[i]+4-a[i])%4; t=0;ans=0;memset(c,0,sizeof(c)); for (i=n;i>=1;i--) d[i]-=d[i-1],ans+=max(0,d[i]); for (i=1;i<=n;i++){ if (d[i]<-1) c[-d[i]]++; else if (d[i]>1){ if (d[i]==2){ if (c[3]) c[3]--,ans--,c[2]++; } else if (d[i]==3){ if(c[3]) c[3]--,ans-=2; else if (c[2]) c[2]--,ans--; } } } printf("%d\n",ans); l--; }}
3 0
- NOIP提高组【JZOJ4788】序列
- JZOJ4788. 【NOIP2016提高A组模拟9.17】序列
- 【JZOJ4788】【NOIP2016提高A组模拟9.17】序列
- 【jzoj4788】【序列】
- jzoj4788 序列
- 【JZOJ4788】序列
- JZOJ4788. 序列
- Jzoj4788 序列
- NOIP提高组 单峰
- NOIP提高组 积木
- NOIP提高组 看电影
- NOIP提高组 鼎纹
- NOIP提高组 千帆渡
- NOIP提高组 Brothers
- NOIP提高组 Crisis
- NOIP提高组 Word
- NOIP提高组 闭门造车
- NOIP提高组 爬山
- AJAX初识
- 学习Java有没有什么捷径,都是脚踏实地!
- 编程珠玑第十二章--应用之取样问题
- Android开发:计算缓存大小并且清空缓存
- english_1
- NOIP提高组【JZOJ4788】序列
- scala学习手记 - case表达式里的模式变量和常量
- 79. Word Search
- android studio 导入github项目需要修改gradle信息
- Struts2动态结果集
- C++ 工具类 —— 词条类(Entry)
- 让你变懒的 Android Studio Live Templates
- yii2使用多个数据库的案例
- jQuery判断checked的三种方法