求 Hack 或调
查看原帖
求 Hack 或调
373198
WhileTrueRP楼主2024/4/3 08:50
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+5;
int b[N];
int f[N];
int get(int t){
	return f[t]==t?f[t]:f[t]=get(f[t]);
}
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		f[i] = i;
	}
	for(int i=1;i<=k+1;i++){
		printf("? ");
		for(int j=1;j<=k;j++){
			printf("%d ",(i+j-1)%(k+1)==0?(k+1):(i+j-1)%(k+1));
		}
		cout<<endl;
		scanf("%d",&b[i]);
		if(i >= 2){
			if(b[i] == b[i-1]){
				int xx = get(i-1);
				int yy = get((i+k-1)%(k+1)==0?(k+1):(i+k-1)%(k+1));
//				printf("{%d,%d}",i-1,(i+k-1)%(k+1)==0?(k+1):(i+k-1)%(k+1));
				if(xx != yy){
					f[xx] = yy;
				}
			}
		}
	}
	if(b[1] == b[k+1]){
		int xx = get(k);
		int yy = get(k+1);
		if(xx != yy){
			f[xx] = yy;
		}
	}
	for(int i=k+2;i<=n;i++){
		printf("? ");
		for(int j=1;j<=k-1;j++){
			printf("%d ",j);
		}
		printf("%d",i);
		cout<<endl;
		scanf("%d",&b[i]);
		if(b[i] == b[1]){
			int xx = get(k);
			int yy = get(i);
			if(xx != yy){
				f[xx] = yy;
			}
		}
	}
	int cnt = 0;
	for(int i=1;i<=k;i++){
		if(get(i) == get(1)){
			cnt ++;
		}
	}
	printf("! ");
	if(cnt%2 == b[1]){
		for(int i=1;i<=n;i++){
			printf("%d ",get(i) == get(1));
		}
	}else{
		for(int i=1;i<=n;i++){
			printf("%d ",get(i) != get(1));
		}
	}
}
2024/4/3 08:50
加载中...