제출 #115289

#제출 시각아이디문제언어결과실행 시간메모리
115289faustaadp웜뱃 (IOI13_wombats)C++17
55 / 100
20084 ms44004 KiB
#include "wombats.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
ll n,m,i,j,x[5050][220],y[5050][220],jum,d[2][5050][2],te,b[5050][220];
void upd()
{
	ll ii;
	d[0][n-1][0]=0;
	d[0][n-1][1]=x[n-1][0];
	d[1][n-1][1]=0;
	d[1][n-1][0]=x[n-1][0];
	for(ii=n-2;ii>=0;ii--)
	{
		d[0][ii][0]=min(d[0][ii+1][0]+y[ii][0],d[0][ii+1][1]+y[ii][1]+x[ii][0]);
		d[0][ii][1]=min(d[0][ii+1][1]+y[ii][1],d[0][ii+1][0]+y[ii][0]+x[ii][0]);
		d[1][ii][0]=min(d[1][ii+1][0]+y[ii][0],d[1][ii+1][1]+y[ii][1]+x[ii][0]);
		d[1][ii][1]=min(d[1][ii+1][1]+y[ii][1],d[1][ii+1][0]+y[ii][0]+x[ii][0]);
	}
	//for(ii=0;ii<n;ii++)
	//	cout<<ii<<" "<<d[0][ii][0]<<" "<<d[0][ii][1]<<"\n";
}
void init(int R, int C, int H[5000][200], int V[5000][200]) 
{
	n=R;
	m=C;
	for(i=0;i<n;i++)
		for(j=0;j<(m-1);j++)
			x[i][j]=H[i][j];
	for(i=0;i<(n-1);i++)
		for(j=0;j<m;j++)
			y[i][j]=V[i][j];
	if(m==2)
	{
		upd();
	}
	else
	if(m==1)
	{
		for(i=0;i<(n-1);i++)
			jum+=y[i][0];
	}
    /* ... */
}

void changeH(int P, int Q, int W) 
{
	if(m==2)
	{
		x[P][Q]=W;
		upd();
	}
	else
		x[P][Q]=W;
    /* ... */
}

void changeV(int P, int Q, int W) {
	if(m==2)
	{
		y[P][Q]=W;
		upd();
	}
	else
	if(m==1)
	{		
		jum-=y[P][Q];
		y[P][Q]=W;
		jum+=y[P][Q];
	}
	else
		y[P][Q]=W;
    /* ... */
}

int escape(int V1, int V2) 
{
	if(m==2)
	{
		return d[V2][0][V1];
	}
	else
	if(m==1)
	{
		return jum;
	}
	else
	{
		priority_queue<pair<ll,pair<ll,ll> > > pq;
		pq.push(mp(0,mp(0,V1)));
		te++;
		while(!pq.empty())
		{
			ll jar=-pq.top().fi;
			ll X=pq.top().se.fi;
			ll Y=pq.top().se.se;
			pq.pop();
			if(b[X][Y]==te)continue;
			b[X][Y]=te;
			if(X==n-1&&Y==V2)
				return jar;
			if(Y>0)
				if(b[X][Y-1]!=te)
					pq.push(mp(-jar-x[X][Y-1],mp(X,Y-1)));
			if(Y<(m-1))
				if(b[X][Y+1]!=te)
					pq.push(mp(-jar-x[X][Y],mp(X,Y+1)));
			if(X<(n-1))
				if(b[X+1][Y]!=te)
					pq.push(mp(-jar-y[X][Y],mp(X+1,Y)));
		}
	}
}
	

컴파일 시 표준 에러 (stderr) 메시지

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
wombats.cpp: In function 'int escape(int, int)':
wombats.cpp:117:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...