题意:
给你一个序列,然后找到两个数 A B 使得 A+B % MOD最大
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
__int64 value[100005];
int main()
{
int n, p;
while(scanf("%d %d", &n, &p) != EOF)
{
for(int i = 0; i < n; i++)
scanf("%I64d", &value[i]), value[i] %= p;
sort(value, value + n);
__int64 Ans = (value[n-1] + value[n-2]) % p;
for(int i = 0; i < n; i++)
{
int l = 0, r = n-1, mid;
while(l <= r)
{
mid = (r+l)/2;
__int64 k = value[i] + value[mid];
if(k < p)
{
if(k > Ans && i != mid)
Ans = k;
l = mid + 1;
}
else r = mid - 1;
}
}
printf("%I64d\n", Ans);
}
}