Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define FOR(i, k, l) for(int i = k; i < l; i++)
  5. #define DFOR(i, k, l) for(int i = k; i > l; i--)
  6. #define FA(i, k) for(int i = 0; i < int(k.size()); i++)
  7. #define DFA(i, k) for(int i = int(k.size()) - 1; i > -1; i--)
  8. #define ASKS(i) for(cin >> (i); (i)--;)
  9.  
  10. // #define endl '\n'
  11. #define all(x) x.begin(), x.end()
  12. #define rall(x) x.rbegin(), x.rend()
  13. #define fi first
  14. #define se second
  15.  
  16. const int MAXINT = 2147483647;
  17. const long long MAXLL = 9223372036854775807;
  18. const long double PI = 3.141592653589793238463;
  19. const long double EPS = 0.0000001;
  20.  
  21. typedef long long ll;
  22. typedef long double ld;
  23. typedef pair<int, int> pii;
  24. typedef pair<ll, ll> pll;
  25. typedef vector<int> vi;
  26. typedef vector<ll> vll;
  27. typedef set<int> si;
  28. typedef set<ll> sll;
  29.  
  30. int ask(int a, int b, int c){
  31.     int resp;
  32.     cout << "? " << a << ' ' << b << ' ' << c << endl;
  33.     cin >> resp;
  34.     return resp;
  35. }
  36.  
  37. int root(int a){
  38.     int l = 0, r = a, m;
  39.     while(r - l > 1){
  40.         m = (l + r) / 2;
  41.         if(m * m * m < a)
  42.             l = m;
  43.         else
  44.             r = m;
  45.     }
  46.     return r;
  47. }
  48.  
  49. int main() {
  50.     ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  51.     cout << setprecision(7) << fixed;
  52.     // freopen("input.txt", "r", stdin);
  53.     // freopen("output.txt", "w", stdout);
  54.  
  55.     int n;
  56.     cin >> n;
  57.     vi ans(n+1, -1);
  58.     ll d[4] = {0}, pr[4] = {0};
  59.  
  60.     while(true){
  61.         d[0] = rand() % n + 1;
  62.         d[1] = rand() % n + 1;
  63.         d[2] = rand() % n + 1;
  64.         while(d[1] == d[0])
  65.             d[1] = rand() % n + 1;
  66.         while(d[2] == d[0] || d[2] == d[0])
  67.             d[2] = rand() % n + 1;
  68.         pr[0] = ask(d[0], d[1], d[2]);
  69.         if(pr[0])
  70.             break;
  71.     }
  72.     for(d[3] = 1; d[3] < n+1; d[3]++){
  73.         pr[1] = ask(d[0], d[1], d[3]);
  74.         if(pr[1]){
  75.             pr[2] = ask(d[0], d[2], d[3]);
  76.             pr[3] = ask(d[1], d[2], d[3]);
  77.             ans[d[0]] = root(pr[0] * pr[1] * pr[2] / pr[3] / pr[3]);
  78.             ans[d[1]] = root(pr[0] * pr[1] * pr[3] / pr[2] / pr[2]);
  79.             ans[d[2]] = root(pr[0] * pr[2] * pr[3] / pr[1] / pr[1]);
  80.             ans[d[3]] = root(pr[1] * pr[2] * pr[3] / pr[0] / pr[0]);
  81.             break;
  82.         }
  83.         else
  84.             ans[d[3]] = 0;
  85.     }
  86.  
  87.     FOR(i, 1, n + 1)
  88.         if(ans[i] == -1)
  89.             ans[i] = ask(d[0], d[1], i) / ans[d[0]] / ans[d[1]];
  90.  
  91.     cout << "! ";
  92.     FOR(i, 1, n + 1)
  93.         cout << ans[i] << ' ';
  94.  
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement