結果

問題 No.3627 Share the Median
コンテスト
ユーザー GOTKAKO
提出日時 2026-08-15 13:24:38
言語 C++17
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,360 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#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++;
    }

}
0