pog在与szh玩游戏,首先pog找到了一个包含 n 个数的序列,然后他在这 n 个数中挑出了一个数A,szh出于对pog的爱,在余下的 n−1 个数中也挑了一个数B,那么szh与pog的恩爱值为 (A+B) 对 p 取模后的余数,pog与szh当然想让恩爱值越高越好,并且他们想知道最高的恩爱值是多少。
若干组数据(不超过 5 组 n≥1000 )。 每组数据第一行两个整数 n(2≤n≤100000) , p(1≤p≤231−1) 。 接下来一行 n 个整数 ai(0≤ai≤231−1) 。
对于每组的每个询问,输出一行,表示pog与szh的最大恩爱值。
4 4 1 2 3 0 4 4 0 0 2 2
3 2
#include <iostream>
#include <cstdio>
#include <cstring>
#include<algorithm>
using namespace std;
int a[100010];
int main()
{
int n,p;
while(cin>>n>>p)
{
for(int i = 1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]%=p;
}
sort(a+1,a+n+1);
int ans = (a[n]+a[n-1])%p;
int last = n;
for(int i = 1; i<=n;i++)
{
while(last && a[last]+a[i]>= p) last--;
if(last) ans = max(ans,a[last]+ a[i]);
}
cout<<ans<<endl;
}
return 0;
}