Submission #597193

#TimeUsernameProblemLanguageResultExecution timeMemory
597193Bench0310Saveit (IOI10_saveit)C++17
75 / 100
194 ms10268 KiB
#include <bits/stdc++.h> #include "grader.h" #include "encoder.h" using namespace std; typedef long long ll; void encode(int n,int h,int m,int *A,int *B) { vector<int> v[n]; for(int i=0;i<m;i++) { int a=A[i],b=B[i]; v[a].push_back(b); v[b].push_back(a); } vector<int> g[n]; vector<int> p(n,-1); function<void(int)> dfs=[&](int a) { for(int to:v[a]) { if(p[to]!=-1) continue; g[a].push_back(to); g[to].push_back(a); p[to]=a; dfs(to); } }; p[0]=-2; dfs(0); for(int i=1;i<n;i++) for(int j=9;j>=0;j--) encode_bit((p[i]>>j)&1); for(int i=0;i<h;i++) { queue<int> q; vector<int> d(n,-1); auto add=[&](int a,int nd) { if(d[a]==-1) { d[a]=nd; q.push(a); } }; add(i,0); while(!q.empty()) { int a=q.front(); q.pop(); for(int to:v[a]) add(to,d[a]+1); } vector<int> x(n+2,0); function<void(int,int)> go=[&](int a,int u) { if(u!=-1) x[a]=(d[a]-d[u]+1); for(int to:g[a]) if(to!=u) go(to,a); }; go(i,-1); for(int j=0;j<n;j+=3) { int t=(9*x[j]+3*x[j+1]+x[j+2]); for(int k=4;k>=0;k--) encode_bit((t>>k)&1); } } }
#include <bits/stdc++.h> #include "grader.h" #include "decoder.h" using namespace std; typedef long long ll; void decode(int n,int h) { vector<int> v[n]; auto dec=[&](int c)->int { int t=0; for(int i=0;i<c;i++) t=2*t+decode_bit(); return t; }; for(int i=1;i<n;i++) { int p=dec(10); v[i].push_back(p); v[p].push_back(i); } for(int i=0;i<h;i++) { vector<int> x(n+2,0); for(int j=0;j<n;j+=3) { int t=dec(5); for(int k=2;k>=0;k--) { x[j+k]=(t%3)-1; t/=3; } } vector<int> d(n,0); function<void(int,int)> go=[&](int a,int p) { if(p!=-1) d[a]=d[p]+x[a]; hops(i,a,d[a]); for(int to:v[a]) if(to!=p) go(to,a); }; go(i,-1); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...