結果

問題 No.3347 Guess The Array
コンテスト
ユーザー GOTKAKO
提出日時 2025-11-13 23:38:19
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,837 bytes
コンパイル時間 2,492 ms
コンパイル使用メモリ 210,176 KB
実行使用メモリ 25,984 KB
平均クエリ数 3178.13
最終ジャッジ日時 2025-11-13 23:38:36
合計ジャッジ時間 14,949 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 41 WA * 5
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N; cin >> N;
    int query = 0;
    auto ask = [&](const vector<int> &B) -> bool {
        query++;
        cout << "? " << B.size();
        for(auto b : B){
            assert(0 <= b && b < N);
            cout << " " << b+1;
        }
        cout << endl;
        
        string s; cin >> s;
        return s=="Yes";
    };
    auto ans = [&](const vector<int> &A) -> void {
        cout << "!";
        for(auto a : A){
            assert(0 <= a && a < N);
            cout << " " << a+1;
        }
        cout << endl;
        if(query > 5000){
            cout << query << endl;
            assert(false);
        }
        exit(0);
    };

    priority_queue<pair<int,vector<int>>,vector<pair<int,vector<int>>>,greater<>> Q;
    for(int i=0; i<N; i++){
        vector<int> now;
        while(true){
            now.push_back(i);
            if(ask(now)) continue;
            else{now.pop_back(); break;}
        }

        Q.push({now.size(),now});
    }
    while(Q.size() > 1){
        auto [ign,B1] = Q.top(); Q.pop();
        auto [IGN,B2] = Q.top(); Q.pop();
        vector<int> now;        
        while(B1.size() && B2.size()){
            now.push_back(B2.at(0));
            for(auto b : B1) now.push_back(b);
            bool v = ask(now);
            for(auto b : B1) now.pop_back();
            if(v == false) now.pop_back(),now.push_back(B1.at(0)),B1.erase(B1.begin());
            else B2.erase(B2.begin()); 
        }
        while(B1.size()) now.push_back(B1.at(0)),B1.erase(B1.begin());
        swap(B1,B2);
        while(B1.size()) now.push_back(B1.at(0)),B1.erase(B1.begin());
        Q.push({now.size(),now});
    }
    {
        auto [ign,A] = Q.top();
        ans(A);
    }
}
0