题解 P6785 【「EZEC-3」排列】
出题人来水一发题解
题意:让你找到一个排列,满足相邻的差互为相反数并且绝对值为
不妨设第
当
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=1e6+10;
int sum[M*2],n,k,maxn,ans=-1;
signed main()
{
cin>>n>>k;
for (int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
sum[a]+=b,maxn=max(maxn,a);
}
if (k==0)
{
for (int i=0;i<=maxn;i++)
if (sum[i]!=1&&sum[i])//注意因为p>=2,所以k=0时sum[i]>=2
ans=max(ans,i*sum[i]);
if (ans==-1)cout<<"NO";
else cout<<ans;
return 0;
}
for (int i=0;i<=maxn;i++)
{
int j=i+k;
if (sum[i]&&sum[j])
ans=max(ans,min(sum[i],sum[j])*(i+j));
}
if (ans==-1)cout<<"NO";
else cout<<ans;
return 0;
}