Lost Numbers(交互 + dfs)
1 /**\ 2 https://codeforces.com/contest/1167/problem/B 3 每日询问相邻的,能知道5个,最后一个也可以推出来 4 直接dfs暴力匹配就行, 5 询问的时候把结果存下来 6 \**/ 7 #include <bits/stdc++.h> 8 using namespace std; 9 10 int q[100]; 11 12 int query(int x, int y) { 13 int tmp; 14 cout << "? " << x << " " << y << "\n"; 15 fflush(stdout); 16 cin >> tmp; 17 return tmp; 18 } 19 20 int vis[100], ok[100], a[7] = {0, 4, 8, 15, 16, 23, 42}; 21 22 void dfs(int s) { 23 if(s == 7) { 24 int f = 0; 25 for(int i = 1; i <= 4; ++i) { 26 if(ok[i] * ok[i + 1] != q[i]) { 27 f = 1; 28 break; 29 } 30 } 31 if(!f) { 32 cout << "! "; 33 for(int i = 1; i <= 6; ++i) { 34 cout << ok[i] << " \n"[i == 6]; 35 } 36 } 37 return; 38 } 39 40 for(int i = 1; i <= 6; ++i) { 41 if(!vis[i]) { 42 ok[s] = a[i]; 43 vis[i] = 1; 44 dfs(s + 1); 45 vis[i] = 0; 46 } 47 } 48 } 49 50 void accept() { 51 for(int i = 1; i <= 4; ++i) q[i] = query(i, i + 1); 52 53 dfs(1); 54 } 55 56 signed main() { 57 accept(); 58 return 0; 59 }