您的位置:首页 > 其它

【NOIP2016提高A组模拟9.17】序列

2016-09-19 20:38 501 查看

题目



分析

首先用ai表示达到目标的步数Bi−Ai(mod4)

根据粉刷栅栏,先不管mod 4的情况,答案就是∑max(ai−ai+1,0)

那我们刚才做个差分ai−=ai+1

当我们给i增加高度,

那么ai−4,ai+1+4

当我们给区间增加高度,那么因为中间的+4-4抵消了,所以

al−4,ar+4

那么我们考虑

al为1、2、3的情况,

就读者私下讨论。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=100005;
using namespace std;
int a
,n,q;
int main()
{
scanf("%d",&q);
while(q--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
a[i]=(x-a[i]+4)%4;
}
int t2=0,t3=0,ans=0;
for(int i=1;i<=n;i++)
{
a[i]-=a[i+1];
ans+=max(a[i],0);
}
for(int i=1;i<=n;i++)
{
if(a[i]==3)
t3++;
else
if(a[i]==2)
t2++;
else
if(a[i]==-2)
{
if(t3)
{
t3--;
t2++;
ans--;
}
}
else
if(a[i]==-3)
{
if(t3)
{
t3--;
ans-=2;
}
else
if(t2)
{
t2--;
ans--;
}
}
}
cout<<ans<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: