Submission #1298359

#TimeUsernameProblemLanguageResultExecution timeMemory
1298359denislavSaveit (IOI10_saveit)C++20
100 / 100
47 ms5952 KiB
#include "grader.h" #include "encoder.h" # include <iostream> # include <vector> # include <algorithm> # include <queue> using namespace std; const int MAX=1e3+11,INF=1e9; const int B=10,K=58; int n,m,H; vector<int> adj[MAX]; int dist[MAX][MAX]; int up[MAX]; void bfs(int start) { for(int i=0;i<n;i++) { dist[start][i]=INF; up[i]=-1; } dist[start][start]=0; up[start]=-1; queue<int> q; q.push(start); while(q.size()>0) { int curr=q.front(); q.pop(); for(int nxt: adj[curr]) { if(dist[start][nxt]>dist[start][curr]+1) { dist[start][nxt]=dist[start][curr]+1; up[nxt]=curr; q.push(nxt); } } } } void encode_num(long long x, int cnt) { vector<int> v; for(int i=0;i<cnt;i++) { v.push_back(x%2); x/=2; } reverse(v.begin(),v.end()); for(int b: v) encode_bit(b); } void reset() { for(int i=0;i<n;i++) { adj[i].clear(); } } void encode(int N, int _H, int P, int *a, int *b) { n=N;m=P;H=_H; reset(); for(int i=0;i<m;i++) { int u=a[i],v=b[i]; adj[u].push_back(v); adj[v].push_back(u); } for(int i=0;i<H;i++) bfs(i); bfs(0); for(int i=1;i<n;i++) encode_num(up[i],B); for(int i=0;i<H;i++) encode_num(dist[i][0],B); for(int i=1;i<n;i++) { long long x=0; for(int j=H-1;j>=0;j--) { x*=3; long long delta=dist[j][i]-dist[j][up[i]]+1; x+=delta; } encode_num(x,K); } }
#include "grader.h" #include "decoder.h" #include <iostream> #include <vector> # include <algorithm> using namespace std; //namespace nz //{ const int MAX=1e3+11; const int B=10,K=58; int n,H; vector<int> adj[MAX]; int dist[MAX][MAX]; long long decode_num(int cnt) { long long x=0; for(int i=0;i<cnt;i++) { x*=2; x+=decode_bit(); } return x; } void dfs(int curr, int par) { if(par!=-1) { for(int j=0;j<H;j++) dist[j][curr]+=dist[j][par]; } for(int j=0;j<H;j++) hops(j,curr,dist[j][curr]); for(int nxt: adj[curr]) dfs(nxt,curr); } void reset() { for(int i=0;i<n;i++) { adj[i].clear(); for(int j=0;j<H;j++) dist[j][i]=0; } } void decode(int _n, int _H) { n=_n;H=_H; reset(); for(int i=1;i<n;i++) { int x=decode_num(B); adj[x].push_back(i); } for(int i=0;i<H;i++) dist[i][0]=decode_num(B); for(int i=1;i<n;i++) { long long x=decode_num(K); for(int j=0;j<H;j++) { long long delta=x%3-1; x/=3; dist[j][i]=delta; } } dfs(0,-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...