坑:
又是一种可以搞死面向案例编程的选手的恶心案例,仗着数组是自己隐藏的,自己是知道答案的,于是就假装问几下然后就输出答案。这题别看样例!光这几个问答根本确定不了排列。
思路:
通过一定能找出
的位置,如果
那么
,如果
,那么
找到之后就可以通过
来得到
的值。
MyCode:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=1e4+7;
int a[maxn];
int main() {
int t,n,num;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
int pos=n;
for(int i=1;i<n;i+=2) {
printf("? %d %d %d %d\n",2,i,i+1,1);
fflush(stdout);
scanf("%d",&num);
if(num==1) {
pos=i; break;
}
else if(num==2) {
printf("? %d %d %d %d\n",2,i+1,i,1);
fflush(stdout);
scanf("%d",&num);
if(num==1) {
pos=i+1; break;
}
}
}
for(int i=1;i<=n;++i) {
if(i==pos) continue;
printf("? %d %d %d %d\n",1,pos,i,n-1);
fflush(stdout);
scanf("%d",&num);
a[i]=num;
}
a[pos]=1;
putchar('!');
for(int i=1;i<=n;++i) printf(" %d",a[i]);
putchar('\n');
fflush(stdout);
}
return 0;
} 
京公网安备 11010502036488号