結果
| 問題 | No.3627 Share the Median |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-15 13:24:38 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,360 bytes |
| 記録 | |
| コンパイル時間 | 2,347 ms |
| コンパイル使用メモリ | 219,232 KB |
| 実行使用メモリ | 9,548 KB |
| 平均クエリ数 | 11.52 |
| 最終ジャッジ日時 | 2026-08-15 13:24:47 |
| 合計ジャッジ時間 | 9,246 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| Sample | 0 % | |
| Easy | 20 % | AC * 16 |
| Hard | 80 % | AC * 9 WA * 2 RE * 13 |
| 合計 | 3 * 20% = 60 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
string s; cin >> s;
int Q; cin >> Q;
int N,M; cin >> N >> M;
if(s.at(0) == 'B') swap(N,M);
vector<pair<int,int>> X(N);
int idx = 0;
for(auto &[x,p] : X) cin >> x,p = idx++;
sort(X.begin(),X.end());
auto share = [&](int pos) -> int {
assert(Q > 0),Q--;
assert(pos < N);
cout << "share " << pos+1 << endl;
int ret; cin >> ret;
if(ret == -1) exit(0);
return ret;
};
bool check = false;
auto answer = [&](int x) -> void {
if(check && x != 123456789) assert(false);
cout << "answer " << x << endl; exit(0);
};
int l1 = 0,l2 = 0,left = (N+M+1)/2;
while(left > 3 && l1 < N && l2 < M){
int k1 = min(left/2,N-l1),k2 = min(left/2,M-l2);
k1--,k2--;
int v1 = X.at(l1+k1).first,v2 = share(X.at(l1+k1).second);
if(v1 < v2 || (v1 == v2 && s.at(0) == 'A')) l1 += k1,left -= k1;
else l2 += k2,left -= k2;
}
while(left){
if(l1 == N) answer(share(0));
if(l2 == M) share(X.at(l2+left-1).second),answer(X.at(l2+left-1).first);
int v1 = X.at(l1).first,v2 = share(X.at(l1).second);
left--;
if(left == 0) answer(min(v1,v2));
if(v1 < v2 || (v1 == v2 && s.at(0) == 'A')) l1++;
else l2++;
}
}