C-嘤嘤不想买东西喵_牛客周赛 Round 49 (nowcoder.com)
思想
贪心思想,题目要求我们求最大连续区间和
因为a[i]在打完折扣之后可能是负值,这些负值对答案没有贡献,所以我们要把这些值置为0加入到答案当中,以确保它们对答案不会产生负贡献..
样例1
6 2
1 1 4 5 1 4
在打完折扣之后a数组变为了
-1 -1 2 3 -1 2
sum=0,sum+=a[0]=-1,此时这个-1 就对答案没有贡献,我们需要把它置为0,继续往下加和.
sum+=a[1]=-1,sum=0;
sum+=a[2]=2,sum+=a[3]=5,sum+=a[4]=4,sum+=a[5]=6
样例1答案就是6
#include<bits/stdc++.h>
#define int long long
using namespace std;
int sum;
const int N=1e5+10;
int a[N],maxn=-1e9+10;
signed main()
{
int n,x;cin>>n>>x;
for(int i=0;i<n;i++)
{
cin>>a[i];
a[i]-=x;
}
for(int i=0;i<n;i++)
{
sum+=a[i];
if(sum<0) sum=0;
maxn=max(maxn,sum);
}
cout<<maxn<<endl;
return 0;
}
这是去掉if(sum<0)sum=0的结果:
这个是没去掉的结果: