交互题萌新求助!!!
查看原帖
交互题萌新求助!!!
164883
Zigh_Wang楼主2022/8/29 16:27

题面什么意思不重要,要求最多2n次询问,我寻思我这个怎么也不可能超过2n啊,但CF上判我第3个点T了。

这个点的初始输入为

2

按照我的算法,依次输入应该是

1

0

1

这才3个询问啊,为啥会T哦

在这里插入图片描述

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

const int MAXN = 1e6 + 5;

int inpt()
{
	int x = 0, f = 1;
	char ch;
	for(ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar());
	if(ch == '-'){
		f = -1;
		ch = getchar();
	}
	do{
		x = (x << 3) + (x << 1) + ch - '0';
		ch = getchar();
	}while(ch >= '0' && ch <= '9');
	return x * f;
}

int n;
int p[MAXN];

int main()
{	
	n = inpt();
	int t = 2;
	while(true) {
		printf("? ");
		for(int i = 1; i <= n; i++)
			printf("%d%c", i == n ? 1 : t, i == n ? '\n' : ' ');
		fflush(stdout);
		
		int tmp = inpt();
		if(!tmp) {
			p[n] = --t;
			break;
		}
		t++;
	}
	
	int del = p[n] - 1;
	for(int i = 1; i <= n; i++, del--) {
		if(!del)
			continue;
		
		int num = n - p[n] + 1;
		printf("? ");
		for(int i = 1; i <= n; i++)
			printf("%d%c", i == n ? num : num + del, i == n ? '\n' : ' ');
		fflush(stdout);
		
		int tmp = inpt();
		p[tmp] = p[n] - del;
	}
	
	printf("! ");
	for(int i = 1; i <= n; i++)
		printf("%d%c", p[i], i == n ? '\n' : ' ');
	fflush(stdout);
	
	return 0;
}
2022/8/29 16:27
加载中...