#include<bits/stdc++.h>
using namespace std;
#define debug(x) cerr<<#x<<' '<<x<<endl
#ifndef ONLINE_JUDGE
#define fuck getchar
#else
#define fuck nc
#endif
char nc(){
static char buf[1<<25],*p=buf,*q=buf;
if(p==q&&(q=(p=buf)+fread(buf,1,1<<25,stdin),p==q))return EOF;
return *p++;
}
template<class T>void read(T&x){
short f=1;x=0;
char ch=fuck();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=fuck();
}while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=fuck();
}x*=f;
}
template<class T>void write(T x){
if(x<0)putchar('-'),x=-x;
if(x>=10)write(x/10);
putchar(x%10+48);
}
#define maxn 2000010
#define int long long
int n,k;
int x,y;
int b[maxn];
int ans=LLONG_MIN;
signed main(){
#ifndef ONLINE_JUDGE
freopen("testdata.in","r",stdin);
#endif
read(n),read(k);
for(int i=1;i<=n;i++){
read(x),read(y);
b[x]+=y;
}
for(int i=1000000;i>=k;i--)
if(b[i]&&b[i-k]){
if(k==0&&b[i]>1)ans=max(ans,b[i]*i);
else ans=max(ans,min(b[i],b[i-k])*(2*i-k));
}
if(ans==LLONG_MIN)puts("NO");
else write(ans);
}
RT
我用b[i] and b[i−k]判断有没有可能无解为什么会挂掉???
导致我比赛的时候另外记录了一个a数组再排序一下两两比较特判无解,也就是说我这样才A掉
for(int i=1;i<=n;i++){
read(x),read(y);
a[i]=x;
b[x]+=y;
}
sort(a+1,a+n+1);
bool flag=1,did=0;
for(int i=1;i<n;i++)
if(a[i+1]-a[i]==k)flag=0,did=1;
if(flag&&did)return puts("NO"),0;
这是什么原理啊好奇怪啊
快读的写法就暂且不要管了方便调试