제출 #586724

#제출 시각아이디문제언어결과실행 시간메모리
586724yutabiWombats (IOI13_wombats)C++14
39 / 100
20027 ms262144 KiB
#include "wombats.h"

#include <bits/stdc++.h>
using namespace std;


typedef pair <int,int> ii;


vector <vector <vector <int> > > DP;

int r;
int c;

vector <vector <int> > horizontal;
vector <vector <int> > vertical;

void recalc()
{
    for(int i=0;i<c;i++)
    {
        for(int j=0;j<r;j++)
        {
            if(j==0)
            {
                for(int k=0;k<c;k++)
                {
                    DP[i][0][k]=1000000007;
                }

                DP[i][0][i]=0;
            }

            else
            {
                for(int k=0;k<c;k++)
                {
                    DP[i][j][k]=DP[i][j-1][k]+vertical[j-1][k];
                }
            }

            vector <bool> v(c,0);
            priority_queue <ii> pq;

            for(int k=0;k<c;k++)
            {
                pq.push(ii(-DP[i][j][k],k));
            }

            while(pq.size())
            {
                int ptr=pq.top().second;

                pq.pop();

                if(v[ptr])
                {
                    continue;
                }

                v[ptr]=1;

                if(ptr<c-1)
                {
                    if(DP[i][j][ptr]+horizontal[j][ptr]<DP[i][j][ptr+1])
                    {
                        DP[i][j][ptr+1]=DP[i][j][ptr]+horizontal[j][ptr];

                        pq.push(ii(-DP[i][j][ptr+1],ptr+1));
                    }
                }

                if(ptr>0)
                {
                    if(DP[i][j][ptr]+horizontal[j][ptr-1]<DP[i][j][ptr-1])
                    {
                        DP[i][j][ptr-1]=DP[i][j][ptr]+horizontal[j][ptr-1];

                        pq.push(ii(-DP[i][j][ptr-1],ptr-1));
                    }
                }
            }
        }
    }

    /*for(int i=0;i<c;i++)
    {
        for(int j=0;j<r;j++)
        {
            for(int k=0;k<c;k++)
            {
                printf("%d ",DP[i][j][k]);
            }

            printf("\n");
        }

        printf("\n");
    }*/
}


void init(int R, int C, int H[5000][200], int V[5000][200])
{
    DP=vector <vector <vector <int> > > (C,vector <vector <int> > (R,vector <int> (C)));

    r=R;
    c=C;

    horizontal=vector <vector <int> > (R,vector <int> (C-1));
    vertical=vector <vector <int> > (R-1,vector <int> (C));

    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            if(i+1!=r)
            {
                vertical[i][j]=V[i][j];
            }

            if(j+1!=c)
            {
                horizontal[i][j]=H[i][j];
            }
        }
    }

    recalc();
}

void changeH(int P, int Q, int W)
{
    horizontal[P][Q]=W;

    recalc();
}

void changeV(int P, int Q, int W)
{
    vertical[P][Q]=W;

    recalc();
}

int escape(int V1, int V2)
{
    return DP[V1][r-1][V2];
}

컴파일 시 표준 에러 (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...