제출 #578026

#제출 시각아이디문제언어결과실행 시간메모리
5780262fat2code저장 (Saveit) (IOI10_saveit)C++17
0 / 100
327 ms6252 KiB
#include "grader.h" #include "encoder.h" #include <bits/stdc++.h> using namespace std; const int nmax = 1005; const int hubs = 36; int nn, hub, dist[hubs][nmax], par[nmax], lol; vector<int>nod[nmax]; bitset<nmax>viz; void construct(){ queue<int>q; viz.reset(); q.push(0); viz[0] = 1; while(q.size()){ auto it = q.front(); q.pop(); for(auto it1 : nod[it]){ if(!viz[it1]){ viz[it1] = 1; par[it1] = it; q.push(it1); } } } for(int i=1;i<nn;i++){ for(int j=0;j<=9;j++){ if(par[i] & (1 << j)) encode_bit(1); else encode_bit(0); } lol += 10; } for(int i=1;i<nn;i++){ for(int j=0;j<hub;j+=3){ int curr = 0; if(dist[j][i] == dist[j][par[i]]){ curr += 1; } else if(dist[j][i] > dist[j][par[i]]){ curr += 2; } curr *= 3; if(j + 1 <= hub - 1){ if(dist[j+1][i] == dist[j+1][par[i]]){ curr += 1; } else if(dist[j+1][i] > dist[j+1][par[i]]){ curr += 2; } } curr *= 3; if(j + 2 <= hub - 1){ if(dist[j+2][i] == dist[j+2][par[i]]){ curr += 1; } else if(dist[j+2][i] > dist[j+2][par[i]]){ curr += 2; } } for(int t=0;t<5;t++){ encode_bit(curr % 2); curr /= 2; } lol += 5; } } cout << lol << '\n'; } void encode(int n, int h, int m, int v1[], int v2[]){ nn = n; hub = h; for(int i=0;i<m;i++){ nod[v1[i]].push_back(v2[i]); nod[v2[i]].push_back(v1[i]); } for(int i=0;i<h;i++){ queue<int>q; viz.reset(); q.push(i); viz[i] = 1; while(q.size()){ auto it = q.front(); q.pop(); for(auto it1 : nod[it]){ if(!viz[it1]){ dist[i][it1] = dist[i][it] + 1; viz[it1] = 1; q.push(it1); } } } } construct(); }
#include "grader.h" #include "decoder.h" #include <bits/stdc++.h> #define all(s) s.begin(), s.end() #define fr first #define sc second using namespace std; const int nmax = 1005; const int hubs = 36; int p[nmax], dust[hubs][nmax], slava; vector <int> nid[nmax]; bitset <nmax> vuz; vector <int> bits[nmax]; void dfs(int s){ vuz[s] = 1; for(auto it : nid[s]){ if(!vuz[it]){ dust[0][it] = dust[0][s] + 1; dfs(it); } } } void decode(int n, int h) { for(int i=1;i<n;i++){ for(int j=0;j<=9;j++){ int heh = decode_bit(); p[i] += heh * (1 << j); } slava += 10; } for(int i=1;i<n;i++){ nid[p[i]].push_back(i); } for(int i=1;i<n;i++){ for(int j=0;j<h;j+=3){ bits[i].push_back(decode_bit()); bits[i].push_back(decode_bit()); bits[i].push_back(decode_bit()); bits[i].push_back(decode_bit()); bits[i].push_back(decode_bit()); slava += 5; } } cout << slava << '\n'; dfs(0); for(int i=0;i<h;i++) dust[i][0] = dust[0][i]; for(int i=0;i<n;i++){ for(auto it : nid[i]){ int curr = 0; for(int j=0;j<h;j+=3){ int lol = bits[it][curr] + 2*bits[it][curr+1] + 4*bits[it][curr+2] + 8*bits[it][curr+3] + 16*bits[it][curr+4]; curr += 5; if(j + 2 < h){ int suka = lol % 3; if(suka == 0){ dust[j+2][it] = dust[j+2][i] - 1; } else if(suka == 1) dust[j+2][it] = dust[j+2][i]; else if(suka == 2){ dust[j+2][it] = dust[j+2][i] + 1; } } lol /= 3; if(j + 1 < h){ int suka = lol % 3; if(suka == 0){ dust[j+1][it] = dust[j+1][i] - 1; } else if(suka == 1) dust[j+1][it] = dust[j+1][i]; else if(suka == 2){ dust[j+1][it] = dust[j+1][i] + 1; } } lol /= 3; if(j < h){ int suka = lol % 3; if(suka == 0){ dust[j][it] = dust[j][i] - 1; } else if(suka == 1) dust[j][it] = dust[j][i]; else if(suka == 2){ dust[j][it] = dust[j][i] + 1; } } lol /= 3; } } } for(int i=0;i<h;i++){ for(int j=0;j<n;j++){ hops(i, j, dust[i][j]); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...