Submission #1090140

#TimeUsernameProblemLanguageResultExecution timeMemory
1090140TymondSaveit (IOI10_saveit)C++17
50 / 100
150 ms10596 KiB
#include "grader.h" #include "encoder.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; #define fi first #define se second #define vi vector<int> #define vll vector<long long> #define pii pair<int, int> #define pll pair<long long, long long> #define pb push_back #define mp make_pair #define eb emplace_back #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); mt19937_64 rng64(chrono::steady_clock::now().time_since_epoch().count()); inline int rand(int l,int r){return uniform_int_distribution<int>(l, r)(rng);} inline ll rand(ll l,ll r){return uniform_int_distribution<ll>(l, r)(rng64);} #ifdef DEBUG auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";} auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";} #define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X) #else #define debug(...){} #endif struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; const int MAXN = 1e3 + 7; const int MAXH = 40; int dist[MAXH][MAXN]; int lg[2 * MAXN]; vi g[MAXN]; int n, h, m; void countDist(int start){ dist[start][start] = 0; queue<int> q; q.push(start); while(sz(q)){ int v = q.front(); q.pop(); for(auto u : g[v]){ if(u == start){ continue; } if(dist[start][u] == 0){ dist[start][u] = dist[start][v] + 1; q.push(u); } } } } void encode(int nv, int nh, int ne, int *v1, int *v2){ n = nv; h = nh; m = ne; for(int i = 0; i < m; i++){ g[v1[i]].pb(v2[i]); g[v2[i]].pb(v1[i]); } for(int i = 0; i < h; i++){ countDist(i); } lg[1] = 1; for(int i = 2; i < 2 * MAXN; i++){ lg[i] = lg[i / 2] + 1; } for(int i = 0; i < h; i++){ for(int j = 0; j < n; j++){ int l = 10; for(int y = 0; y < i; y++){ l = min(l, lg[dist[y][i] + dist[y][j]]); } for(int y = 0; y < l; y++){ if(dist[i][j] & (1 << y)){ encode_bit(1); }else{ encode_bit(0); } } } } return; }
#include "grader.h" #include "decoder.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; #define fi first #define se second #define vi vector<int> #define vll vector<long long> #define pii pair<int, int> #define pll pair<long long, long long> #define pb push_back #define mp make_pair #define eb emplace_back #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); mt19937_64 rng64(chrono::steady_clock::now().time_since_epoch().count()); inline int rand(int l,int r){return uniform_int_distribution<int>(l, r)(rng);} inline ll rand(ll l,ll r){return uniform_int_distribution<ll>(l, r)(rng64);} #ifdef DEBUG auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";} auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";} #define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X) #else #define debug(...){} #endif struct custom_hash { static uint64_t splitmix64(uint64_t x) { x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; const int MAXN = 1e3 + 7; const int MAXH = 40; int dist[MAXH][MAXN]; int lg[2 * MAXN]; int n, h; void decode(int nv, int nh) { n = nv; h = nh; lg[1] = 1; for(int i = 2; i < 2 * MAXN; i++){ lg[i] = lg[i / 2] + 1; } for(int i = 0; i < h; i++){ for(int j = 0; j < n; j++){ int l = 10; for(int y = 0; y < i; y++){ l = min(l, lg[dist[y][i] + dist[y][j]]); } for(int y = 0; y < l; y++){ int a = decode_bit(); dist[i][j] += (a * (1 << y)); } hops(i, j, dist[i][j]); } } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...