首页 > 代码库 > CSU1350 To Add which?

CSU1350 To Add which?

题目链接:

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

 

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

 

代码:

 1 #include<iostream> 2 #include<cstdio> 3 #define M 100100 4 using namespace std; 5  6 int num[M],Max[M],Min[M]; 7  8 int max(int a,int b) 9 {10     return a>b?a:b;11 }12 int main()13 {14     int T,n,D;15     long long ans;16     cin>>T;17     while(T--){18         ans=0;19         cin>>n>>D;20         for(int i=0;i<n;i++) cin>>num[i];21 22         Max[0]=num[0];23         for(int i=1;i<n;i++)24         {25             if(Max[i-1]-num[i]>D)26                 Max[i]=Max[i-1]-D;27             else Max[i]=num[i];28         }29 30         Min[n-1]=num[n-1];31         for(int i=n-2;i>=0;i--)32         {33             if(Min[i+1]-num[i]>D)34                 Min[i]=Min[i+1]-D;35             else Min[i]=num[i];36         }37 38         for(int i=0;i<n;i++) ans+=(max(Min[i],Max[i])-num[i]);39         cout<<ans<<endl;40     }41     return 0;42 }

 

CSU1350 To Add which?