Submission #1200523

#TimeUsernameProblemLanguageResultExecution timeMemory
1200523ansoriSphinx's Riddle (IOI24_sphinx)C++20
28.50 / 100
160 ms1196 KiB
#include "sphinx.h" #include<bits/stdc++.h> #define ll long long using namespace std; const int msz = 256; int perform_experiment(vector<int> E); vector<vector<int>> comp; vector<int> g[msz] , cmp(msz , -1); int n , color[msz]; vector<bool> w; void dfs(int v){ w[v] = 1; for(auto to : g[v]){ if((! w[to]) and color[v] == color[to]){ dfs(to); } } } int expected(int l , int r , int p){ w = vector<bool> (n , 0); for(int i = 0;i < n; ++ i){ if(cmp[i] >= l and cmp[i] <= r) color[i] = cmp[i]; else color[i] = n; } color[p] = color[g[p][0]]; int sm = 0; for(int i = 0;i < n; ++ i){ if(! w[i]){ w[i] = 1; sm ++; dfs(i); } } return sm; } bool ask(int l , int r , int p){ vector<int> qu(n , n); qu[p] = -1; for(int j = l;j <= r; ++ j){ for(auto to : comp[j]){ qu[to] = -1; } } int cnt = perform_experiment(qu); //cout << l << ' ' << r << ' ' << expected(l , r , p) << ' ' << cnt << '\n'; if(expected(l , r , p) == cnt) return true; return false; } vector<int> find_colours(int N, std::vector<int> x, std::vector<int> y) { int m = x.size(); n = N; for(int i = 0;i < m; ++ i){ g[x[i]].push_back(y[i]); g[y[i]].push_back(x[i]); } comp.push_back({0}); cmp[0] = 0; //ask(0 , 0 , 1); for(int i = 1;i < n; ++ i){ if(! ask(0 , comp.size() - 1 , i)){ comp.push_back({i}); cmp[i] = comp.size() - 1; continue ; } int l = 0; int r = comp.size(); while(l + 1 < r){ int mid = (l + r) / 2; if(ask(mid , r - 1 , i)) l = mid; else r = mid; } comp[l].push_back(i); cmp[i] = l; } vector<int> G(n); for(int i = 0;i < comp.size(); ++ i){ for(auto to : comp[i]){ G[to] = i; } } return G; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...