您的位置:首页 > 其它

CSU1350 To Add which?

2014-07-26 23:18 330 查看
题目链接:

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1350

这题目因为每一个数都跟相邻的数有关,所以可以从左到右和从右到左一次扫一遍即可

代码:

#include<iostream>
#include<cstdio>
#define M 100100
using namespace std;

int num[M],Max[M],Min[M];

int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int T,n,D;
long long ans;
cin>>T;
while(T--){
ans=0;
cin>>n>>D;
for(int i=0;i<n;i++) cin>>num[i];

Max[0]=num[0];
for(int i=1;i<n;i++)
{
if(Max[i-1]-num[i]>D)
Max[i]=Max[i-1]-D;
else Max[i]=num[i];
}

Min[n-1]=num[n-1];
for(int i=n-2;i>=0;i--)
{
if(Min[i+1]-num[i]>D)
Min[i]=Min[i+1]-D;
else Min[i]=num[i];
}

for(int i=0;i<n;i++) ans+=(max(Min[i],Max[i])-num[i]);
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: