Submission #263412

#TimeUsernameProblemLanguageResultExecution timeMemory
263412patrikpavic2Two Transportations (JOI19_transportations)C++17
0 / 100
6 ms1280 KiB
#include "Azer.h" #include <vector> #include <queue> #include <cstdlib> #define X first #define Y second #define PB push_back using namespace std; typedef vector < int > vi; typedef pair < int, int > pii; namespace { const int N = 2005; int n; vector < pii > v[N]; queue < bool > info; int dis[N], mks; pii nadi_najblizeg(){ int bst = 0, dod = 501; mks = 0; for(int i = 0;i < n;i++) if(dis[i] > mks) mks = dis[i]; for(int i = 0;i < n;i++){ if(dis[i] == -1) continue; for(pii nxt : v[i]){ if(dis[nxt.X] != -1) continue; if(nxt.Y + dis[i] - mks < dod){ dod = nxt.Y + dis[i] - mks; bst = nxt.X; } } } return {bst, dod}; } bool daj_bit(){ int ret = info.front(); info.pop(); return ret; } int daj_broj(int ln){ int ret = 0; for(int i = 0;i < ln;i++){ if(daj_bit()) ret += (1 << i); } return ret; } void posalji_broj(int x, int ln){ for(int i = 0;i < ln;i++) SendA(!!(x & (1 << i))); } void korak(){ int tko = rand() % 2; posalji_broj(tko, 1); pii tmp = nadi_najblizeg(); int cv = tmp.X, brj = tmp.Y; if(tko){ posalji_broj(brj, 9); int odg = daj_broj(1); if(!odg){ posalji_broj(cv, 11); } else{ brj = daj_broj(9); cv = daj_broj(11); } } else{ int brj2 = daj_broj(9); if(brj2 <= brj){ posalji_broj(0, 1); brj = brj2; cv = daj_broj(11); } else{ posalji_broj(1, 1); posalji_broj(brj, 9); posalji_broj(cv, 11); } } dis[cv] = mks + brj; } } void InitA(int n, int a, vi U, vi V, vi C) { ::n = n; for(int i = 0;i < a;i++){ v[U[i]].PB({V[i], C[i]}); v[V[i]].PB({U[i], C[i]}); } dis[0] = 0; for(int i = 1;i < n;i++) korak(); Answer(); } void ReceiveA(bool x) { info.push(x); } vi Answer() { vi ans(n); for (int k = 0; k < n; ++k) { ans[k] = dis[k]; } return ans; }
#include "Baijan.h" #include <vector> #include <queue> #include <cstdlib> #define X first #define Y second #define PB push_back using namespace std; typedef vector < int > vi; typedef pair < int, int > pii; namespace { const int N = 2005; int n; vector < pii > v[N]; queue < bool > info; int dis[N], mks; pii nadi_najblizeg(){ int bst = 0, dod = 501; mks = 0; for(int i = 0;i < n;i++) if(dis[i] > mks) mks = dis[i]; for(int i = 0;i < n;i++){ if(dis[i] == -1) continue; for(pii nxt : v[i]){ if(dis[nxt.X] != -1) continue; if(nxt.Y + dis[i] - mks < dod){ dod = nxt.Y + dis[i] - mks; bst = nxt.X; } } } return {bst, dod}; } bool daj_bit(){ int ret = info.front(); info.pop(); return ret; } int daj_broj(int ln){ int ret = 0; for(int i = 0;i < ln;i++){ if(daj_bit()) ret += (1 << i); } return ret; } void posalji_broj(int x, int ln){ for(int i = 0;i < ln;i++) SendB(!!(x & (1 << i))); } void korak(){ int tko = !(rand() % 2); posalji_broj(tko, 1); pii tmp = nadi_najblizeg(); int cv = tmp.X, brj = tmp.Y; if(tko){ posalji_broj(brj, 9); int odg = daj_broj(1); if(!odg){ posalji_broj(cv, 11); } else{ brj = daj_broj(9); cv = daj_broj(11); } } else{ int brj2 = daj_broj(9); if(brj2 <= brj){ posalji_broj(0, 1); brj = brj2; cv = daj_broj(11); } else{ posalji_broj(1, 1); posalji_broj(brj, 9); posalji_broj(cv, 11); } } dis[cv] = mks + brj; } } void InitB(int n, int b, vi U, vi V, vi C) { ::n = n; for(int i = 0;i < b;i++){ v[U[i]].PB({V[i], C[i]}); v[V[i]].PB({U[i], C[i]}); } dis[0] = 0; for(int i = 1;i < n;i++) korak(); } void ReceiveB(bool x) { info.push(x); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...