Submission #381381

#TimeUsernameProblemLanguageResultExecution timeMemory
381381VimmerZagrade (COI20_zagrade)C++14
0 / 100
3078 ms1280 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#pragma GCC optimize("-O3") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-Ofast") #define N 100500 #define NN 1005000 #define PB push_back //#define endl '\n' #define pri(x) cout << x << endl #define _ << " " << #define all(x) x.begin(), x.end() #define sz(x) int(x.size()) #define M ll(1e9 + 7) #define F first #define S second using namespace std; //using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef short int si; typedef unsigned long long ull; //typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; //ordered_set se; void TL() { while (1) { } } int nx[N], ls[N], n, q; int ask(int l, int r) { q--; if (q == -1) TL(); pri("?" _ l _ r); int x; cin >> x; return x; } char ans[N]; int main() { ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("1.in", "r", stdin); cin >> n >> q; for (int i = 2; i <= n; i++) ls[i] = i - 1; nx[n] = ls[1] = -1; for (int i = 1; i < n; i++) nx[i] = i + 1; for (int i = 1; i <= n; i++) ans[i] = 'a'; int beg = 1; while (1) { while (beg <= n && ans[beg] != 'a') beg++; if (beg > n) break; int cur = beg; int nxt = cur + 1; while (nxt <= n && ans[nxt] != 'a') nxt++; while (1) { if (ask(cur, nxt)) { ans[cur] = '('; ans[nxt] = ')'; cur = nxt + 1; while (cur <= n && ans[cur] != 'a') cur++; nxt = cur + 1; while (nxt <= n && ans[nxt] != 'a') nxt++; if (nxt > n) break; } cur = nxt; nxt++; while (nxt <=n && ans[nxt] != 'a') nxt++; if (nxt > n) break; } // while (cur != -1) // { // int l = cur, r = nx[cur]; // // if (r == -1) // break; // // if (l < 1 || n < l) // TL(); // // if (r < 1 || n < r) // TL(); // // if (ans[l] == 'a' && ans[r] == 'a' && ask(l, r)) // { // ans[l] = '('; // // ans[r] = ')'; // // int lst = ls[l]; // // int nxt = nx[r]; // // if (lst != -1) // nx[lst] = nxt; // // if (nxt != -1) // ls[nxt] = lst; // // cur = r; // } // else // cur = r; // } } cout << "! "; for (int i = 1; i <= n; i++) cout << ans[i]; cout << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...