Submission #742715

# Submission time Handle Problem Language Result Execution time Memory
742715 2023-05-16T18:48:09 Z airths Mecho (IOI09_mecho) C++17
60 / 100
554 ms 16604 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 = n*n;
	// 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 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 354 ms 16268 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 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 340 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 340 KB Output is correct
18 Correct 1 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 2 ms 340 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Correct 2 ms 340 KB Output is correct
31 Correct 1 ms 468 KB Output is correct
32 Correct 1 ms 468 KB Output is correct
33 Correct 15 ms 3364 KB Output is correct
34 Correct 15 ms 3388 KB Output is correct
35 Incorrect 64 ms 3420 KB Output isn't correct
36 Correct 18 ms 4292 KB Output is correct
37 Correct 21 ms 4348 KB Output is correct
38 Incorrect 84 ms 4304 KB Output isn't correct
39 Correct 24 ms 5404 KB Output is correct
40 Correct 26 ms 5368 KB Output is correct
41 Incorrect 112 ms 5552 KB Output isn't correct
42 Correct 30 ms 6552 KB Output is correct
43 Correct 31 ms 6556 KB Output is correct
44 Incorrect 167 ms 6552 KB Output isn't correct
45 Correct 37 ms 7876 KB Output is correct
46 Correct 37 ms 7904 KB Output is correct
47 Incorrect 171 ms 7880 KB Output isn't correct
48 Correct 48 ms 9292 KB Output is correct
49 Correct 44 ms 9300 KB Output is correct
50 Incorrect 211 ms 9292 KB Output isn't correct
51 Correct 53 ms 10860 KB Output is correct
52 Correct 56 ms 10888 KB Output is correct
53 Incorrect 295 ms 10960 KB Output isn't correct
54 Correct 59 ms 12500 KB Output is correct
55 Correct 62 ms 12620 KB Output is correct
56 Incorrect 320 ms 12556 KB Output isn't correct
57 Correct 78 ms 14352 KB Output is correct
58 Correct 71 ms 14320 KB Output is correct
59 Incorrect 399 ms 14308 KB Output isn't correct
60 Correct 81 ms 16216 KB Output is correct
61 Correct 80 ms 16236 KB Output is correct
62 Incorrect 424 ms 16320 KB Output isn't correct
63 Correct 338 ms 16344 KB Output is correct
64 Correct 554 ms 16204 KB Output is correct
65 Correct 445 ms 16248 KB Output is correct
66 Correct 376 ms 16212 KB Output is correct
67 Correct 354 ms 16232 KB Output is correct
68 Correct 190 ms 16280 KB Output is correct
69 Correct 188 ms 16292 KB Output is correct
70 Correct 160 ms 16316 KB Output is correct
71 Correct 190 ms 16520 KB Output is correct
72 Incorrect 128 ms 16304 KB Output isn't correct
73 Incorrect 191 ms 16476 KB Output isn't correct
74 Correct 283 ms 16468 KB Output is correct
75 Correct 284 ms 16424 KB Output is correct
76 Correct 254 ms 16440 KB Output is correct
77 Correct 279 ms 16436 KB Output is correct
78 Correct 324 ms 16420 KB Output is correct
79 Correct 249 ms 16536 KB Output is correct
80 Correct 274 ms 16392 KB Output is correct
81 Correct 284 ms 16344 KB Output is correct
82 Correct 287 ms 16456 KB Output is correct
83 Correct 319 ms 16396 KB Output is correct
84 Correct 373 ms 16360 KB Output is correct
85 Correct 307 ms 16424 KB Output is correct
86 Correct 321 ms 16604 KB Output is correct
87 Correct 330 ms 16340 KB Output is correct
88 Correct 422 ms 16296 KB Output is correct
89 Correct 357 ms 16404 KB Output is correct
90 Correct 337 ms 16292 KB Output is correct
91 Correct 381 ms 16364 KB Output is correct
92 Correct 376 ms 16464 KB Output is correct