結果

問題 No.3347 Guess The Array
コンテスト
ユーザー ponjuice
提出日時 2025-10-25 15:41:32
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,726 bytes
コンパイル時間 3,206 ms
コンパイル使用メモリ 286,728 KB
実行使用メモリ 26,240 KB
平均クエリ数 3492.87
最終ジャッジ日時 2025-11-13 20:52:11
合計ジャッジ時間 13,859 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 21 WA * 25
権限があれば一括ダウンロードができます

ソースコード

diff #

// ちゃんとしてない方の merge sort の解答例(WA)

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

bool query(const vector<int>& q) {
    cout << "? " << q.size() << " ";
    for(int i = 0; i < q.size(); i++) {
        cout << q[i] << " \n"[i==q.size()-1];
    }
    cout << flush;
    string s;
    cin >> s;
    return s == "Yes";
}

int n;
void answer(const vector<int>& ans) {
    assert(ans.size() == n);
    cout << "! ";
    for(int i = 0; i < n; i++) {
        cout << ans[i] << " \n"[i==n-1];
    }
    cout << flush;
}

vector<int> merge(const vector<int>& a, const vector<int>& b) {
    vector<int> merged = b;
    int now = 0;
    for(int i = 0; i < a.size(); i++) {
        while(true) {
            if(now == merged.size()) {
                merged.push_back(a[i]);
                now++;
                break;
            }
            
            vector<int> q = merged;
            q.insert(q.begin() + now, a[i]);
            if(query(q)) {
                merged.insert(merged.begin() + now, a[i]);
                now++;
                break;
            } else {
                now++;
            }
        }
    }

    return merged;
}

int main() {
    cin >> n;

    vector<vector<int>> groups;
    for(int i = 1; i <= n; i++) {
        int cnt = 1;
        for(; cnt <= n; cnt++) {
            if(!query(vector<int>(cnt, i))) break;
        }
        if (cnt == 1) continue;
        groups.push_back(vector<int>(cnt - 1, i));
    }

    while(groups.size() > 1) {
        vector<int> a = groups.back(); groups.pop_back();
        vector<int> b = groups.back(); groups.pop_back();
        vector<int> merged = merge(a, b);
        groups.push_back(merged);
    }

    answer(groups[0]);
}
0