Submission #289038

#TimeUsernameProblemLanguageResultExecution timeMemory
289038egekabasWombats (IOI13_wombats)C++14
39 / 100
20095 ms262148 KiB
#include "wombats.h" #include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define ff first #define ss second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<ull, ull> pull; typedef pair<int, int> pii; typedef pair<ld, ld> pld; int r, c; const int sq = 50; int h[5000][200]; int v[5000][200]; int dis[5000/sq+5][200][sq+5][200]; void dijkstra(int beg, int end, int imp, int dis[5000][200]){ for(int i = beg; i <= end; ++i) for(int j = 0; j < c; ++j) dis[i-beg][j] = 1e9+7; priority_queue<pair<int, pii>, vector<pair<int, pii>>, greater<pair<int, pii>>> pq; dis[end-beg][imp] = 0; pq.push({0, {end, imp}}); while(pq.size()){ int d = pq.top().ff; int x = pq.top().ss.ff; int y = pq.top().ss.ss; pq.pop(); if(d > dis[x-beg][y]) continue; if(x > beg && dis[x-1-beg][y] > d + v[x-1][y]){ dis[x-1-beg][y] = d + v[x-1][y]; pq.push({dis[x-1-beg][y], {x-1, y}}); } if(y > 0 && dis[x-beg][y-1] > d + h[x][y-1]){ dis[x-beg][y-1] = d + h[x][y-1]; pq.push({dis[x-beg][y-1], {x, y-1}}); } if(y < c-1 && dis[x-beg][y+1] > d + h[x][y]){ dis[x-beg][y+1] = d + h[x][y]; pq.push({dis[x-beg][y+1], {x, y+1}}); } } } void init(int R, int C, int H[5000][200], int V[5000][200]) { r = R; c = C; for(int i = 0; i < r; ++i) for(int j = 0; j < c; ++j){ h[i][j] = H[i][j]; v[i][j] = V[i][j]; } for(int i = 0; i < r; i += sq) for(int j = 0; j < c; ++j) dijkstra(i, min(i+sq, r-1), j, dis[i/sq][j]); } void changeH(int P, int Q, int W) { h[P][Q] = W; int gr = P/sq; for(int j = 0; j < c; ++j) dijkstra(gr*sq, min(r-1, (gr+1)*sq), j, dis[gr][j]); if(gr > 0 && P%sq == 0){ --gr; for(int j = 0; j < c; ++j) dijkstra(gr*sq, min(r-1, (gr+1)*sq), j, dis[gr][j]); } } void changeV(int P, int Q, int W) { v[P][Q] = W; int gr = P/sq; for(int j = 0; j < c; ++j) dijkstra(gr*sq, min(r-1, (gr+1)*sq), j, dis[gr][j]); } int escape(int V1, int V2) { vector<int> curd(c, 1e9+7); vector<int> newd(c, 1e9+7); curd[V1] = 0; for(int i = 0; i < r; i += sq){ for(int j = 0; j < c; ++j) for(int k = 0; k < c; ++k) newd[k] = min(newd[k], curd[j]+dis[i/sq][k][0][j]); for(int j = 0; j < c; ++j){ curd[j] = newd[j]; newd[j] = 1e9+7; } } assert(curd[V2] >= 0); return curd[V2]; }

Compilation message (stderr)

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
#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...