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); }