pog loves szh II
分析
。
。
当时,利用双指针扫描法求最大的,记为。
当,即时,取最大的,记为。
答案为。
实现
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 100010;
int n, p;
int a[N];
int main () {
while (cin >> n >> p) {
for (int i = 1; i <= n; ++ i) cin >> a[i];
for (int i = 1; i <= n; ++ i) a[i] %= p;
sort(a + 1, a + n + 1);
LL res = ((LL)a[n - 1] + a[n]) % p; // 可能是第二种情况
for (int i = 1, j = n; i <= n; ++ i) {
while (j > i && (LL)a[i] + a[j] >= p) -- j;
if (i != j) {
res = max(res, (LL)a[i] + a[j]);
} else {
break;
}
}
cout << res << endl;
}
return 0;
}