はまやんはまやんはまやん

hamayanhamayan's blog

Explosive energy drink [yukicoder 934]

https://yukicoder.me/problems/no/934

解説

https://yukicoder.me/submissions/402813

リアクティブ問題。
色々考えると思いつくけど、どういう道筋で思いつくんだろうね。
ある魔剤以外を混ぜたときに、
 爆発する→ある魔剤は爆発に必要ない
 爆発しない→ある魔剤は爆発に必要
これで1個ずつ見ていけばN回で全部どっちかが分かる。

int N;
//---------------------------------------------------------------------------------------------------
int ask(int without) {
    int M = N - 1;
    vector<int> v;
    rep(i, 1, N + 1) if (i != without) v.push_back(i);
    printf("? %d\n", M);
    rep(i, 0, M) {
        if (i) printf(" ");
        printf("%d", v[i]);
    }
    printf("\n");
    fflush(stdout);

    int ans; cin >> ans;
    return ans;
}
void answer(vector<int> ans) {
    int K = ans.size();
    printf("! %d\n", K);
    rep(i, 0, K) {
        if (i) printf(" ");
        printf("%d", ans[i]);
    }
    printf("\n");
    fflush(stdout);
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    vector<int> ans;
    rep(i, 1, N + 1) {
        auto res = ask(i);
        if (res == 0) ans.push_back(i);
    }
    answer(ans);
}