求调 AT D
  • 板块学术版
  • 楼主rainygame
  • 当前回复22
  • 已保存回复22
  • 发布时间2023/8/5 22:00
  • 上次更新2023/11/3 05:39:46
查看原帖
求调 AT D
804607
rainygame楼主2023/8/5 22:00
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 1001

int n, k, t, ind;
int vis[MAXN], ans[MAXN];
vector<int> odd, even;
set<int> st;

signed main(){
    cin >> n >> k;
    ans[1] = 1;
    for (int i(1); i<=n; ++i) st.insert(i);
    for (int i(1); i<n; ++i){
    	cout << "? ";
    	st.erase(i);
    	ind = 0;
    	for (auto j: st){
    		cout << j << ' ';
    		if ((++ind) == k) break;
		}
		st.insert(i);
    	cout << endl;
    	cin >> vis[i];
    	
    	if (i > 1){
    		if (vis[i] == vis[i-1]) ans[i] = ans[i-1];
    		else ans[i] = 1-ans[i-1];
    		if (ans[i]) odd.push_back(i);
    		else even.push_back(i);
		}
	}
	
	cout << "? 1 ";
	--k;
	for (int i(0); i<min((int)(odd.size()-(odd.size()&1)), k); ++i) cout << odd[i] << ' ';
	if (k > (int)(odd.size()-(odd.size()&1))){
		for (int i(0); i<k-(int)(odd.size()-(odd.size()&1)); ++i) cout << even[i] << ' ';
	}
	cout << endl;
	cin >> vis[n];
	
	cout << "! ";
	if (vis[n] & 1){
		for (int i(1); i<=n; ++i) cout << ans[i] << ' ';
	}else{
		for (int i(1); i<=n; ++i) cout << 1-ans[i] << ' ';
	}
	cout << endl;

    return 0;
}

评测姬说我样例都不过去,我很伤心

2023/8/5 22:00
加载中...