Submission #1735778


Source Code Expand

#include <bits/stdc++.h>
#define REP(i,a,b) for(int i=(a);i<(b);i++)
#define RREP(i,a,b) for(int i=(a);i>=(b);i--)
#define pq priotity_queue
typedef long long ll; typedef long double ld;
using namespace std;
const int INF=1e9, MOD=1e9+7, around[]={0,1,1,-1,-1,0,-1,1,0,0};
const ld PI=abs(acos(-1));
int h,w,k,min_cost[1010][1010];
string li[1010];

int bfs(int sx, int sy, char c){
	const int vx[]={0,1,0,-1}, vy[]={1,0,-1,0};
	memset(min_cost, -1, sizeof(min_cost));
	
	queue<pair<int,int>> que;
	que.emplace(sx,sy);
	min_cost[sx][sy]=0;
	
	while(!que.empty()){
		auto p=que.front(); que.pop();
		
		if(li[p.first][p.second]==c) return min_cost[p.first][p.second];
		REP(i,0,4){
			int nx=p.first+vx[i], ny=p.second+vy[i];
			if(nx<0 or ny<0 or nx>=h or ny>=w) continue;
			if(min_cost[nx][ny]!=-1) continue;
			if(li[nx][ny]=='X') continue;
			min_cost[nx][ny]=min_cost[p.first][p.second]+1;
			que.emplace(nx,ny);
		}
	}
	
	return -1;
}
	
int main(){
	cin >> h >> w >> k;
	REP(i,0,h) cin >> li[i];
	
	vector<pair<int,pair<int,int>>> vec;
	REP(i,0,h) REP(j,0,w) if(li[i][j]=='S') vec.push_back(make_pair(0,make_pair(i,j)));
	REP(i,0,h) REP(j,0,w) REP(l,1,k+1) if(li[i][j]==l+'0') vec.push_back(make_pair(l,make_pair(i,j)));
	sort(vec.begin(),vec.end());
	
	ll s=0;
	REP(j,0,vec.size()-1) s+=bfs(vec[j].second.first,vec[j].second.second,vec[j].first+'1');	
	
	cout << s << endl;
	return 0;
}

Submission Info

Submission Time
Task E - チーズ (Cheese)
User ecasdqina
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1445 Byte
Status AC
Exec Time 106 ms
Memory 5248 KB

Judge Result

Set Name set01 set02 set03 set04 set05
Score / Max Score 20 / 20 20 / 20 20 / 20 20 / 20 20 / 20
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
Case Name Status Exec Time Memory
data1 AC 3 ms 4224 KB
data2 AC 5 ms 4224 KB
data3 AC 5 ms 4224 KB
data4 AC 106 ms 5120 KB
data5 AC 73 ms 5248 KB