Submission #742716

# Submission time Handle Problem Language Result Execution time Memory
742716 2023-05-16T18:49:10 Z airths Mecho (IOI09_mecho) C++17
60 / 100
612 ms 16588 KB
/*
 * 
 * 	^v^
 * 
 */
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <iomanip>
#include <map>
#include <numeric>
#include <functional>
#include <algorithm>
#include <set>
#include <queue>
#include <climits>
#include <cstdlib>
#include <chrono>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
using namespace std;
// #define ordered_set tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>
#define iamtefu ios_base::sync_with_stdio(false); cin.tie(0);
#define ll long long int
#define ld long double
#define sc(a) scanf("%lld", &a);
#define scv(a, n) vector<ll> a(n);fl(i,0,n){sc(a[i])}
#define prl(a) fl(i,0,a.size()){printf("%lld ", a[i]);}printf("\n");
#define fl(i,a,n) for (ll i(a); i<n; i++)
#define rfl(i,a,n) for (ll i(n-1); i>=a; i--)
#define print(a) for (auto x:a){cout<<x<<" ";} cout<<"\n";
#define tt int tt; cin>>tt; for(;tt--;)
ll gcd(ll a, ll b){
	if (b==0){
		return a;
	}
	return gcd(b, a%b);
}
ll pw(ll a, ll b, ll m){
	ll res=1;
	a%=m;
	while (b){
		if (b&1){
			res=(res*a)%m;
		}
		a=(a*a)%m;
		b/=2;
	}
	return res;
}
void scn(){
	ll n, s; cin>>n>>s;
	vector <string> c(n);
	vector <vector <ll>> a(n+1, vector <ll>(n+1, 1e9));
	queue <vector <ll>> q;
	fl(i,0,n){
		cin>>c[i];
		fl(j,0,n){
			if (c[i][j]=='H'){
				q.push({i, j});
				a[i][j]=0;
			}
		}
	}
	vector <ll> di={1, 1, 0, -1, -1, -1, 0, 1};
	vector <ll> dj={0, 1, 1, 1, 0, -1, -1, -1};
	while (!q.empty()){
		auto j = q.front();
		q.pop();
		for (int d=0; d<8; d+=2){
			ll i1 = j[0]+di[d], j1 = j[1]+dj[d];
			if (i1>=0 && j1>=0 && i1<n && j1<n && a[i1][j1]==1e9 && (c[i1][j1]=='G' || c[i1][j1]=='M')){
				q.push({i1, j1});
				a[i1][j1]=a[j[0]][j[1]]+1;
			}
		}
	}
	vector <vector <ll>> dis(n+1, vector <ll>(n+1, 1e9));
	vector <ll> hij;
	fl(i,0,n){
		fl(j,0,n){
			if (c[i][j]=='M'){
				q.push({i, j});
				dis[i][j]=0;
				hij={i, j};
			}
		}
	}
	while (!q.empty()){
		auto j = q.front();
		q.pop();
		for (int d=0; d<8; d+=2){
			ll i1 = j[0]+di[d], j1 = j[1]+dj[d];
			if (i1>=0 && j1>=0 && i1<n && j1<n && dis[i1][j1]==1e9 && (c[i1][j1]=='G' || c[i1][j1]=='D')){
				dis[i1][j1]=dis[j[0]][j[1]]+1;
				q.push({i1, j1});
			}
		}
	}
	for (auto &y:dis){
		for (auto &x:y){
			if (x!=1e9){
				x=(x+s-1)/s;
			}
		}
	}
	if (a[hij[0]][hij[1]]==0){
		cout<<"-1\n";
		return;
	}
	// for (auto x:dis){
	// 	print(x)
	// }
	// cout<<'\n';
	// for (auto x:a){
	// 	print(x)
	// }
	auto ist=[&](ll mid){
		vector <vector <ll>> vis(n+1, vector <ll>(n+1));
		queue <vector <ll>> q;
		q.push({hij[0], hij[1], s});
		while (!q.empty()){
			auto j = q.front();
			q.pop();
			if (c[j[0]][j[1]]=='D'){
				return true;
			}
			if (j[2]==0 && dis[j[0]][j[1]]+mid>=a[j[0]][j[1]]){
				// cout<<dis[j[0]][j[1]]<<" "<<mid<<" "<<a[j[0]][j[1]]<<"  pl1\n";
				continue;
			} else if (j[2] && dis[j[0]][j[1]]+mid-1>=a[j[0]][j[1]]){
				continue;
			}
			// cout<<c[j[0]][j[1]]<<"  pl\n";
			for (int d=0; d<8; d+=2){
				ll i1 = j[0]+di[d], j1 = j[1]+dj[d];
				if (i1>=0 && i1<n && j1>=0 && j1<n && (c[i1][j1]=='D' || c[i1][j1]=='G') && vis[i1][j1]==0){
					q.push({i1, j1, (j[2]==0?s-1:j[2]-1)});
					vis[i1][j1]++;
				}
			}
		}
		return false;
	};
	ll l = 0, r = 1e18;
	// cout<<ist(3)<<"  o\n";
	while (l<=r){
		// cout<<l<<" "<<r<<'\n';
		ll mid = (l+r)/2;
		// cout<<mid<<" "<<ist(mid)<<"  pl\n";
		if (ist(mid)){
			l = mid+1;
		} else {
			r = mid-1;
		}
	}
	if (ist(0)==0){
		cout<<"-1\n";
		return;
	}
	cout<<max(0ll,l-1)<<'\n';

	// not necessarily distinct
}
int main(){
	iamtefu;
#if defined(airths)
	auto t1=chrono::high_resolution_clock::now();
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#else
	//
#endif
	// tt
	{
		scn();
	}
#if defined(airths)
	auto t2=chrono::high_resolution_clock::now();
	ld ti=chrono::duration_cast<chrono::nanoseconds>(t2-t1).count();
	ti*=1e-6;
	cerr<<"Time: "<<setprecision(12)<<ti;
	cerr<<"ms\n";
#endif
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 460 ms 16472 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Incorrect 1 ms 340 KB Output isn't correct
13 Incorrect 1 ms 340 KB Output isn't correct
14 Correct 2 ms 388 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 0 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 340 KB Output is correct
21 Correct 1 ms 340 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 1 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 1 ms 340 KB Output is correct
29 Correct 2 ms 340 KB Output is correct
30 Correct 2 ms 340 KB Output is correct
31 Correct 2 ms 468 KB Output is correct
32 Correct 1 ms 468 KB Output is correct
33 Correct 26 ms 3376 KB Output is correct
34 Correct 26 ms 3584 KB Output is correct
35 Incorrect 72 ms 3600 KB Output isn't correct
36 Correct 33 ms 4504 KB Output is correct
37 Correct 45 ms 4312 KB Output is correct
38 Incorrect 95 ms 4524 KB Output isn't correct
39 Correct 44 ms 5412 KB Output is correct
40 Correct 44 ms 5368 KB Output is correct
41 Incorrect 130 ms 5552 KB Output isn't correct
42 Correct 57 ms 6764 KB Output is correct
43 Correct 73 ms 6640 KB Output is correct
44 Incorrect 166 ms 6712 KB Output isn't correct
45 Correct 66 ms 7988 KB Output is correct
46 Correct 67 ms 7960 KB Output is correct
47 Incorrect 216 ms 8036 KB Output isn't correct
48 Correct 79 ms 9364 KB Output is correct
49 Correct 77 ms 9348 KB Output is correct
50 Incorrect 247 ms 9368 KB Output isn't correct
51 Correct 100 ms 11016 KB Output is correct
52 Correct 92 ms 10992 KB Output is correct
53 Incorrect 289 ms 10912 KB Output isn't correct
54 Correct 110 ms 12580 KB Output is correct
55 Correct 106 ms 12680 KB Output is correct
56 Incorrect 336 ms 12728 KB Output isn't correct
57 Correct 153 ms 14408 KB Output is correct
58 Correct 129 ms 14460 KB Output is correct
59 Incorrect 395 ms 14400 KB Output isn't correct
60 Correct 156 ms 16332 KB Output is correct
61 Correct 143 ms 16268 KB Output is correct
62 Incorrect 464 ms 16304 KB Output isn't correct
63 Correct 408 ms 16348 KB Output is correct
64 Correct 612 ms 16360 KB Output is correct
65 Correct 530 ms 16392 KB Output is correct
66 Correct 465 ms 16404 KB Output is correct
67 Correct 393 ms 16376 KB Output is correct
68 Correct 266 ms 16316 KB Output is correct
69 Correct 215 ms 16360 KB Output is correct
70 Correct 229 ms 16316 KB Output is correct
71 Correct 224 ms 16352 KB Output is correct
72 Incorrect 193 ms 16392 KB Output isn't correct
73 Incorrect 243 ms 16520 KB Output isn't correct
74 Correct 356 ms 16588 KB Output is correct
75 Correct 354 ms 16484 KB Output is correct
76 Correct 348 ms 16480 KB Output is correct
77 Correct 388 ms 16524 KB Output is correct
78 Correct 359 ms 16452 KB Output is correct
79 Correct 375 ms 16460 KB Output is correct
80 Correct 350 ms 16540 KB Output is correct
81 Correct 381 ms 16480 KB Output is correct
82 Correct 316 ms 16536 KB Output is correct
83 Correct 393 ms 16536 KB Output is correct
84 Correct 402 ms 16512 KB Output is correct
85 Correct 376 ms 16464 KB Output is correct
86 Correct 399 ms 16516 KB Output is correct
87 Correct 373 ms 16420 KB Output is correct
88 Correct 438 ms 16540 KB Output is correct
89 Correct 401 ms 16392 KB Output is correct
90 Correct 430 ms 16356 KB Output is correct
91 Correct 423 ms 16352 KB Output is correct
92 Correct 405 ms 16468 KB Output is correct