Submission #1074071

#TimeUsernameProblemLanguageResultExecution timeMemory
1074071mindiyakWombats (IOI13_wombats)C++14
21 / 100
20084 ms24624 KiB
#include "wombats.h" #include <vector> #include <iostream> #include <queue> typedef long long ll; #define F first #define S second using namespace std; int H[5000][200]; int V[5000][200]; int R,C; int sum = 0; int sub2 = 0; int dp[25][25]; void calc2(int V1){ priority_queue<pair<int,pair<int,int>>> pq; pq.push({0,{0,V1}}); int dis[25][25]; int vis[25][25]; for(int i=0;i<25;i++)for(int j=0;j<25;j++)dis[i][j] = 2e9; for(int i=0;i<25;i++)for(int j=0;j<25;j++)vis[i][j] = 0; dis[0][V1] = 0; while(!pq.empty()){ int y = pq.top().S.F; int x = pq.top().S.S; pq.pop(); if(vis[y][x])continue; vis[y][x] = 1; if(x > 0 && (dis[y][x] + H[y][x-1] < dis[y][x-1])){ // cerr << x << "," << y << " " << dis[y][x] << " " << H[y][x-1] << " L\n"; dis[y][x-1] = dis[y][x] + H[y][x-1]; pq.push({-dis[y][x-1],{y,x-1}}); } if(x < (C-1) && (dis[y][x] + H[y][x] < dis[y][x+1])){ // cerr << x << "," << y << " " << dis[y][x] << " " << H[y][x] << " R\n"; dis[y][x+1] = dis[y][x] + H[y][x]; pq.push({-dis[y][x+1],{y,x+1}}); } if(y < (R-1) && (dis[y][x] + V[y][x] < dis[y+1][x])){ // cerr << x << "," << y << " " << dis[y][x] << " " << V[y][x] << " D\n"; dis[y+1][x] = dis[y][x] + V[y][x]; pq.push({-dis[y+1][x],{y+1,x}}); } } // for(int i=0;i<R;i++){ // for(int j=0;j<C;j++){ // cerr << dis[i][j] << " "; // }cerr << endl; // }cerr << endl; for(int i=0;i<25;i++)dp[V1][i] = dis[R-1][i]; } void init(int r, int c, int h[5000][200], int v[5000][200]) { R = r; C = c; if(R<=20 && C<= 20)sub2 = 1; for(int i=0;i<5000;i++)for(int j=0;j<200;j++)H[i][j] = h[i][j]; for(int i=0;i<5000;i++)for(int j=0;j<200;j++)V[i][j] = v[i][j]; for(int i=0;i<5000;i++)for(int j=0;j<200;j++)sum += V[i][j]; if(sub2){ for(int i=0;i<25;i++)calc2(i); } } void changeH(int P, int Q, int W) { H[P][Q] = W; } void changeV(int P, int Q, int W) { sum -= V[P][Q]; sum += W; V[P][Q] = W; } int escape(int V1, int V2) { if(C == 1){ return sum; } if(sub2){ return dp[V1][V2]; } priority_queue<pair<int,pair<int,int>>> pq; pq.push({0,{0,V1}}); int dis[5005][205]; int vis[5005][205]; for(int i=0;i<5005;i++)for(int j=0;j<205;j++)dis[i][j] = 2e9; for(int i=0;i<5005;i++)for(int j=0;j<205;j++)vis[i][j] = 0; dis[0][V1] = 0; while(!pq.empty()){ int y = pq.top().S.F; int x = pq.top().S.S; pq.pop(); if(vis[y][x])continue; vis[y][x] = 1; if(x > 0 && (dis[y][x] + H[y][x-1] < dis[y][x-1])){ // cerr << x << "," << y << " " << dis[y][x] << " " << H[y][x-1] << " L\n"; dis[y][x-1] = dis[y][x] + H[y][x-1]; pq.push({-dis[y][x-1],{y,x-1}}); } if(x < (C-1) && (dis[y][x] + H[y][x] < dis[y][x+1])){ // cerr << x << "," << y << " " << dis[y][x] << " " << H[y][x] << " R\n"; dis[y][x+1] = dis[y][x] + H[y][x]; pq.push({-dis[y][x+1],{y,x+1}}); } if(y < (R-1) && (dis[y][x] + V[y][x] < dis[y+1][x])){ // cerr << x << "," << y << " " << dis[y][x] << " " << V[y][x] << " D\n"; dis[y+1][x] = dis[y][x] + V[y][x]; pq.push({-dis[y+1][x],{y+1,x}}); } } // for(int i=0;i<R;i++){ // for(int j=0;j<C;j++){ // cerr << dis[i][j] << " "; // }cerr << endl; // }cerr << endl; return dis[R-1][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...