Submission #640629

#TimeUsernameProblemLanguageResultExecution timeMemory
640629socpiteZagonetka (COI18_zagonetka)C++14
27 / 100
73 ms336 KiB
#include<bits/stdc++.h> using namespace std; #define f first #define s second typedef long long ll; typedef long double ld; const int maxn = 105; const int mod = 1e9+7; int n; vector<int> g[maxn], fg[maxn], rfg[maxn]; int vis[maxn], pos[maxn], qry[maxn], p[maxn], deg[maxn], rdeg[maxn], ans[maxn]; ; vector<int> vec; set<int> st; bool ask(){ cout << "query "; for(int i = 1; i <= n; i++)cout << qry[i] << " "; cout << endl; bool x; cin >> x; cout << endl; return !x; } void dfs(int x, int l, int r){ vec.push_back(x); vis[x]=1; for(auto v: g[x]){ if(v > r || v < l)continue; if(!vis[v])dfs(v, l, r); } } void fe(int l, int r){ for(int i = 1; i <= n; i++)vis[i]=0; vec.clear(); dfs(r, l, r); if(vis[l])return; vector<int> sus; sort(vec.begin(), vec.end()); sus.insert(sus.end(), vec.begin(), vec.end()); vec.clear(); dfs(l, l, r); sort(vec.begin(), vec.end()); sus.insert(sus.end(), vec.begin(), vec.end()); vector<int> notsus = sus; sort(notsus.begin(), notsus.end()); vec.clear(); for(int i = 1; i <= n; i++)qry[i]=p[i]; for(int i = 0; i < sus.size(); i++){ qry[pos[sus[i]]]=notsus[i]; } if(ask()){ g[l].push_back(r); g[r].push_back(l); fg[pos[r]].push_back(pos[l]); deg[pos[l]]++; rfg[pos[l]].push_back(pos[r]); rdeg[pos[r]]++; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n; i++){ cin >> p[i]; pos[p[i]]=i; } for(int i = 1; i <= n; i++){ for(int j = 1; j+i <= n; j++){ fe(j, i+j); } } cout << "end" << endl; for(int i = 1; i <= n; i++)if(!deg[i])st.insert(i); for(int i = n; i > 0; i--){ auto x = *prev(st.end()); st.erase(x); ans[x]=i; for(auto v: fg[x]){ deg[v]--; if(!deg[v])st.insert(v); } } for(int i = 1; i <= n; i++)cout << ans[i] << " "; cout << endl; for(int i = 1; i <= n; i++){ if(!rdeg[i])st.insert(i); } for(int i = 1; i <= n; i++){ auto x = *prev(st.end()); st.erase(x); ans[x]=i; for(auto v: rfg[x]){ rdeg[v]--; if(!rdeg[v])st.insert(v); } } for(int i = 1; i <= n; i++)cout << ans[i] << " "; cout << endl; } /* 1 3 5 4 2 */

Compilation message (stderr)

zagonetka.cpp: In function 'void fe(int, int)':
zagonetka.cpp:57:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(int i = 0; i < sus.size(); i++){
      |                    ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...