Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define FOR(i, k, l) for(int i = k; i < l; i++)
- #define DFOR(i, k, l) for(int i = k; i > l; i--)
- #define FA(i, k) for(int i = 0; i < int(k.size()); i++)
- #define DFA(i, k) for(int i = int(k.size()) - 1; i > -1; i--)
- #define ASKS(i) for(cin >> (i); (i)--;)
- // #define endl '\n'
- #define all(x) x.begin(), x.end()
- #define rall(x) x.rbegin(), x.rend()
- #define fi first
- #define se second
- const int MAXINT = 2147483647;
- const long long MAXLL = 9223372036854775807;
- const long double PI = 3.141592653589793238463;
- const long double EPS = 0.0000001;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- typedef vector<int> vi;
- typedef vector<ll> vll;
- typedef set<int> si;
- typedef set<ll> sll;
- int ask(int a, int b, int c){
- int resp;
- cout << "? " << a << ' ' << b << ' ' << c << endl;
- cin >> resp;
- return resp;
- }
- int root(int a){
- int l = 0, r = a, m;
- while(r - l > 1){
- m = (l + r) / 2;
- if(m * m * m < a)
- l = m;
- else
- r = m;
- }
- return r;
- }
- int main() {
- ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- cout << setprecision(7) << fixed;
- // freopen("input.txt", "r", stdin);
- // freopen("output.txt", "w", stdout);
- int n;
- cin >> n;
- vi ans(n+1, -1);
- ll d[4] = {0}, pr[4] = {0};
- while(true){
- d[0] = rand() % n + 1;
- d[1] = rand() % n + 1;
- d[2] = rand() % n + 1;
- while(d[1] == d[0])
- d[1] = rand() % n + 1;
- while(d[2] == d[0] || d[2] == d[0])
- d[2] = rand() % n + 1;
- pr[0] = ask(d[0], d[1], d[2]);
- if(pr[0])
- break;
- }
- for(d[3] = 1; d[3] < n+1; d[3]++){
- pr[1] = ask(d[0], d[1], d[3]);
- if(pr[1]){
- pr[2] = ask(d[0], d[2], d[3]);
- pr[3] = ask(d[1], d[2], d[3]);
- ans[d[0]] = root(pr[0] * pr[1] * pr[2] / pr[3] / pr[3]);
- ans[d[1]] = root(pr[0] * pr[1] * pr[3] / pr[2] / pr[2]);
- ans[d[2]] = root(pr[0] * pr[2] * pr[3] / pr[1] / pr[1]);
- ans[d[3]] = root(pr[1] * pr[2] * pr[3] / pr[0] / pr[0]);
- break;
- }
- else
- ans[d[3]] = 0;
- }
- FOR(i, 1, n + 1)
- if(ans[i] == -1)
- ans[i] = ask(d[0], d[1], i) / ans[d[0]] / ans[d[1]];
- cout << "! ";
- FOR(i, 1, n + 1)
- cout << ans[i] << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement