結果
| 問題 |
No.507 ゲーム大会(チーム決め)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-09-09 11:08:18 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,092 bytes |
| コンパイル時間 | 2,238 ms |
| コンパイル使用メモリ | 198,604 KB |
| 最終ジャッジ日時 | 2025-01-05 02:51:30 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 18 WA * 1 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int MAXN = int(1e5);
int N, M;
int A[MAXN];
int main() {
ios::sync_with_stdio(false);
cin >> N >> M;
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
vector<int> dsc;
for (int i = 0; i < N; ++i) {
dsc.emplace_back(A[i]);
}
sort(dsc.begin(), dsc.end());
dsc.erase(unique(dsc.begin(), dsc.end()), dsc.end());
int lb = 0, ub = int(dsc.size()) - 1;
int ans = -1;
while (lb <= ub) {
int mb = lb + ub >> 1;
vector<int> z;
bool flag = false;
int us = A[0] + dsc[mb];
for (int i = 1; i < N; ++i) {
if (not flag and A[i] == dsc[mb]) {
flag = true;
continue;
}
z.emplace_back(A[i]);
}
sort(z.begin(), z.end());
int lp = 0, rp = int(z.size()) - 1;
int cnt = 0;
while (lp < rp) {
while (lp < rp and z[lp] + z[rp] <= us) ++lp;
if (rp - lp + 1 < 2) break;
++cnt;
++lp;
--rp;
}
if (cnt < M) {
ub = mb - 1;
ans = dsc[mb];
} else {
lb = mb + 1;
}
}
cout << ans << endl;
return 0;
}