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 }

 

posted @ 2022-03-22 14:40  std&ice  阅读(100)  评论(0编辑  收藏  举报