답안 #896735

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
896735 2024-01-02T03:38:08 Z LCJLY Mecho (IOI09_mecho) C++14
22 / 100
303 ms 21140 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ld long double
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl; 
#define show4(x,y) for(auto it:x) cout << it << " "; cout << #y << endl;
typedef pair<int,int>pii;
typedef pair<pii,pii>pi2;

void solve(){	
	int n,k;
	cin >> n >> k;
	
	string arr[n];
	for(int x=0;x<n;x++){
		cin >> arr[x];
	}
	
	int l=0;
	int r=n;
	int best=-1;
	int mid;
	
	pii start;
	pii done;
	
	int dist[n+5][n+5];
	memset(dist,-1,sizeof(dist));
	queue<pii>q;
	for(int x=0;x<n;x++){
		for(int y=0;y<n;y++){
			if(arr[x][y]=='H'){
				q.push({x,y});
				dist[x][y]=0;
			}
			else if(arr[x][y]=='M') start={x,y};
			else if(arr[x][y]=='D') done={x,y};
		}
	}
	
	pii dir[4]={
		{0,1},
		{0,-1},
		{1,0},
		{-1,0},
	};
	
	while(!q.empty()){
		pii cur=q.front();
		q.pop();
		for(auto it:dir){
			int newx=cur.first+it.first;
			int newy=cur.second+it.second;
			if(newx<0||newy<0||newx>=n||newy>=n) continue;
			if(dist[newx][newy]!=-1) continue;
			if(arr[newx][newy]=='T') continue;
			dist[newx][newy]=dist[cur.first][cur.second]+1;
			q.push({newx,newy});
		}
	}
	
	while(l<=r){
		mid=(l+r)/2;
		
		int dist2[n][n];
		
		memset(dist2,-1,sizeof(dist2));
		dist2[start.first][start.second]=k*mid;
		q.push({start.first,start.second});
		bool visited[n+5][n+5];
		memset(visited,0,sizeof(visited));
		
		for(int x=0;x<n;x++){
			vector<pii>storage;
			int target=(x+1+mid)*k;
			while(!q.empty()){
				pii cur=q.front();
				q.pop();
				if((dist2[cur.first][cur.second]+k-1)/k==x+mid+1&&x+mid+1<dist[cur.first][cur.second]){
					storage.push_back({cur.first,cur.second});
					visited[cur.first][cur.second]=1;
				}
				if(dist2[cur.first][cur.second]>=target) continue;
				for(auto it:dir){
					int newx=cur.first+it.first;
					int newy=cur.second+it.second;
					if(newx<0||newy<0||newx>=n||newy>=n) continue;
					if(dist2[newx][newy]!=-1) continue;
					if(arr[newx][newy]=='T') continue;
					dist2[newx][newy]=dist2[cur.first][cur.second]+1;
					q.push({newx,newy});
				}
			}
			
			for(auto it:storage) q.push(it);
		}
		
		if(visited[done.first][done.second]){
			best=mid;
			l=mid+1;
		}
		else r=mid-1;
	}
	cout << best;
}

int32_t main(){										
	ios::sync_with_stdio(0);	
	cin.tie(0);
	//freopen("out.txt", "w", stdout);
	int t=1;
	//cin >> t;
	while(t--){
		solve();
	}	
}





		


		
		
	
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Correct 0 ms 348 KB Output is correct
4 Incorrect 0 ms 348 KB Output isn't correct
5 Incorrect 0 ms 348 KB Output isn't correct
6 Incorrect 0 ms 348 KB Output isn't correct
7 Incorrect 114 ms 12828 KB Output isn't correct
8 Correct 1 ms 344 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Incorrect 1 ms 348 KB Output isn't correct
12 Incorrect 0 ms 348 KB Output isn't correct
13 Incorrect 0 ms 348 KB Output isn't correct
14 Correct 1 ms 348 KB Output is correct
15 Incorrect 0 ms 348 KB Output isn't correct
16 Incorrect 1 ms 348 KB Output isn't correct
17 Incorrect 0 ms 348 KB Output isn't correct
18 Incorrect 0 ms 348 KB Output isn't correct
19 Incorrect 1 ms 348 KB Output isn't correct
20 Incorrect 0 ms 348 KB Output isn't correct
21 Incorrect 0 ms 348 KB Output isn't correct
22 Incorrect 0 ms 348 KB Output isn't correct
23 Incorrect 0 ms 348 KB Output isn't correct
24 Incorrect 1 ms 348 KB Output isn't correct
25 Incorrect 0 ms 348 KB Output isn't correct
26 Incorrect 1 ms 348 KB Output isn't correct
27 Incorrect 0 ms 348 KB Output isn't correct
28 Incorrect 1 ms 348 KB Output isn't correct
29 Incorrect 0 ms 348 KB Output isn't correct
30 Incorrect 1 ms 348 KB Output isn't correct
31 Incorrect 1 ms 348 KB Output isn't correct
32 Incorrect 1 ms 348 KB Output isn't correct
33 Incorrect 3 ms 2604 KB Output isn't correct
34 Incorrect 21 ms 2652 KB Output isn't correct
35 Incorrect 29 ms 3952 KB Output isn't correct
36 Incorrect 4 ms 3160 KB Output isn't correct
37 Incorrect 27 ms 3160 KB Output isn't correct
38 Incorrect 33 ms 5480 KB Output isn't correct
39 Incorrect 5 ms 3932 KB Output isn't correct
40 Incorrect 35 ms 3932 KB Output isn't correct
41 Incorrect 47 ms 6472 KB Output isn't correct
42 Incorrect 6 ms 4696 KB Output isn't correct
43 Incorrect 53 ms 4980 KB Output isn't correct
44 Incorrect 58 ms 7744 KB Output isn't correct
45 Incorrect 7 ms 5720 KB Output isn't correct
46 Incorrect 57 ms 5920 KB Output isn't correct
47 Incorrect 73 ms 9784 KB Output isn't correct
48 Incorrect 9 ms 6748 KB Output isn't correct
49 Incorrect 68 ms 6928 KB Output isn't correct
50 Incorrect 96 ms 10804 KB Output isn't correct
51 Incorrect 10 ms 7772 KB Output isn't correct
52 Incorrect 89 ms 8104 KB Output isn't correct
53 Incorrect 104 ms 12316 KB Output isn't correct
54 Incorrect 11 ms 9052 KB Output isn't correct
55 Incorrect 92 ms 9264 KB Output isn't correct
56 Incorrect 128 ms 14164 KB Output isn't correct
57 Incorrect 13 ms 10332 KB Output isn't correct
58 Incorrect 122 ms 10560 KB Output isn't correct
59 Incorrect 183 ms 18600 KB Output isn't correct
60 Incorrect 16 ms 11608 KB Output isn't correct
61 Incorrect 122 ms 11680 KB Output isn't correct
62 Incorrect 201 ms 21032 KB Output isn't correct
63 Incorrect 141 ms 11868 KB Output isn't correct
64 Incorrect 303 ms 21140 KB Output isn't correct
65 Incorrect 241 ms 11868 KB Output isn't correct
66 Incorrect 156 ms 11888 KB Output isn't correct
67 Incorrect 182 ms 11892 KB Output isn't correct
68 Incorrect 60 ms 11860 KB Output isn't correct
69 Correct 69 ms 13004 KB Output is correct
70 Incorrect 43 ms 11828 KB Output isn't correct
71 Incorrect 37 ms 11864 KB Output isn't correct
72 Incorrect 28 ms 12120 KB Output isn't correct
73 Incorrect 47 ms 12380 KB Output isn't correct
74 Correct 114 ms 15816 KB Output is correct
75 Correct 67 ms 12376 KB Output is correct
76 Correct 69 ms 12376 KB Output is correct
77 Correct 68 ms 12396 KB Output is correct
78 Correct 104 ms 12124 KB Output is correct
79 Correct 131 ms 17060 KB Output is correct
80 Correct 61 ms 12332 KB Output is correct
81 Correct 82 ms 12336 KB Output is correct
82 Correct 71 ms 12340 KB Output is correct
83 Correct 94 ms 12120 KB Output is correct
84 Correct 185 ms 19840 KB Output is correct
85 Correct 86 ms 12480 KB Output is correct
86 Correct 94 ms 12380 KB Output is correct
87 Correct 105 ms 13048 KB Output is correct
88 Correct 97 ms 12388 KB Output is correct
89 Correct 189 ms 19636 KB Output is correct
90 Correct 109 ms 12888 KB Output is correct
91 Correct 111 ms 13160 KB Output is correct
92 Correct 90 ms 12440 KB Output is correct