这题应该有问题 在for循环中你小于n或者小于max都是可以AC的,但正解应该是小于max,因为这个测试数据小于n的话你的答案是0也能AC,那不就错了吗,还是有一些题目我没看懂?最开始写成<n也A了,太尬了 6 3 100 5 100 6 101 7 101 5 99 1 99 2
#include "stdio.h"
#include "string.h"
#include "math.h"
long long n,w,x[200005],b,a,ans,s[200005],max;
main()
{
int i,j;
scanf("%lld%lld",&n,&w);
for(i=1;i<=n;i++)
{
scanf("%lld%lld",&a,&b);
x[a]+=b;
max=fmax(a,max);
}
if(w==0) {printf("0"); return 0;}
for(i=1;i<=n;i++)
s[i]=s[i-1]+x[i];
for(i=w/2;i<=n;i++)
{
ans=fmax(s[i+w/2]-s[i-w/2-1],ans);
}
printf("%lld",ans);
}
#include "stdio.h"
#include "string.h"
#include "math.h"
long long n,w,x[200005],b,a,ans,s[200005],max;
main()
{
int i,j;
scanf("%lld%lld",&n,&w);
for(i=1;i<=n;i++)
{
scanf("%lld%lld",&a,&b);
x[a]+=b;
max=fmax(a,max);
}
if(w==0) {printf("0"); return 0;}
for(i=1;i<=max;i++)
s[i]=s[i-1]+x[i];
for(i=w/2;i<=max;i++)
{
ans=fmax(s[i+w/2]-s[i-w/2-1],ans);
}
printf("%lld",ans);
}