Submission #882833

# Submission time Handle Problem Language Result Execution time Memory
882833 2023-12-03T20:01:01 Z abhinavshukla408 Mecho (IOI09_mecho) C++17
22 / 100
341 ms 31256 KB
#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <cassert>
#include <math.h>
 
using namespace std;
 
#define endl "\n"
#define int int64_t 
#define pb push_back
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define FOR0(i,a) FOR(i,0,a)
#define FOR1(i,a) for (int i = (1); i <= (a); ++i)
#define TRAV(a,x) for (auto& a: x)

using pii = pair<int,int>;
using vi = vector<int>;
vi dx = {-1,0,1,0};
vi dy = {0,-1,0,1};
const int NMAX=800;
int N;
int S;
pii start={0,0};
pii end2={0,0};

bool f(int k,string grid[NMAX][NMAX],int distBees[NMAX][NMAX]){
	queue<pii> cur;
	cur.push(start);
	int dist[N][N];
	FOR0(i,N){
		FOR0(j,N){
			dist[i][j]=-1;
		}
	}
	dist[start.first][start.second]=0;
	while(!cur.empty()){
		pii curNode=cur.front();
		cur.pop();
		FOR0(i,4){
			int newR=curNode.first+dx[i];
			int newC=curNode.second+dy[i];
			if(newR<0 || newR>=N || newC<0 || newC>=N){continue;}
			if((grid[newR][newC]=="G" || grid[newR][newC]=="D") && dist[newR][newC]==(-1)){
				if((distBees[newR][newC]-k)>((dist[curNode.first][curNode.second]+1)/S)){
					//cout<<newR<<" "<<newC<<endl;
					dist[newR][newC]=dist[curNode.first][curNode.second]+1;
					cur.push({newR,newC});
				}
			}
		}
	}

	if(dist[end2.first][end2.second]!=(-1)){
		return true;
	}
	return false;

}

int last_true(int lo, int hi,string grid[NMAX][NMAX],int distBees[NMAX][NMAX]) {
	// if none of the values in the range work, return lo - 1
	lo--;
	while (lo < hi) {
		// find the middle of the current range (rounding up)
		int mid = lo + (hi - lo + 1) / 2;
		if (f(mid,grid,distBees)) {
			// if mid works, then all numbers smaller than mid also work
			lo = mid;
		} else {
			// if mid does not work, greater values would not work either
			hi = mid - 1;
		}
	}
	return lo;
}


int32_t main(){

	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	// cout<<"yo"<<endl;
	// return 0;
	cin>>N>>S;
	string grid[NMAX][NMAX];
	int distBees[NMAX][NMAX];
	int distMan[NMAX][NMAX];
	
	queue<pii> cur;
	FOR0(r,N){
		string in;
		cin>>in;
		FOR0(c,N){
			distBees[r][c]=-1;
			grid[r][c]=(in.at(c));
			if(grid[r][c]=="H"){
				cur.push({r,c});
				distBees[r][c]=0;
			}
			if(grid[r][c]=="M"){
				start={r,c};
			}
			if(grid[r][c]=="D"){
				end2={r,c};
			}
		}
	}
	// return 0;
	while(!cur.empty()){
		pii curNode=cur.front();
		int curR=curNode.first;
		int curC=curNode.second;
		cur.pop();
		FOR0(i,4){
				int newR=curNode.first+dx[i];
				int newC=curNode.second+dy[i];
				if(newR<0 || newR>=N || newC<0 || newC>=N){continue;}
				if(grid[newR][newC]!="M" && distBees[newR][newC]==(-1)){
					distBees[newR][newC]=distBees[curR][curC]+1;
					cur.push({newR,newC});
				}
		}
	}
	//return 0;
	int ans=last_true(0,100000000,grid,distBees);
	if(ans==100000000){
		ans=-1;
	}
	cout<<ans<<endl;
	



	return 0;
}

Compilation message

mecho.cpp: In function 'int32_t main()':
mecho.cpp:95:6: warning: unused variable 'distMan' [-Wunused-variable]
   95 |  int distMan[NMAX][NMAX];
      |      ^~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 14 ms 25440 KB Output is correct
2 Incorrect 14 ms 25432 KB Output isn't correct
3 Correct 17 ms 25436 KB Output is correct
4 Incorrect 17 ms 25356 KB Output isn't correct
5 Incorrect 15 ms 25492 KB Output isn't correct
6 Incorrect 14 ms 25436 KB Output isn't correct
7 Incorrect 197 ms 30736 KB Output isn't correct
8 Correct 15 ms 25432 KB Output is correct
9 Incorrect 19 ms 25460 KB Output isn't correct
10 Correct 14 ms 25424 KB Output is correct
11 Correct 17 ms 25436 KB Output is correct
12 Incorrect 14 ms 25436 KB Output isn't correct
13 Incorrect 17 ms 25296 KB Output isn't correct
14 Correct 16 ms 25472 KB Output is correct
15 Incorrect 14 ms 25432 KB Output isn't correct
16 Incorrect 14 ms 25436 KB Output isn't correct
17 Incorrect 14 ms 25436 KB Output isn't correct
18 Incorrect 14 ms 25436 KB Output isn't correct
19 Incorrect 15 ms 25284 KB Output isn't correct
20 Incorrect 14 ms 25436 KB Output isn't correct
21 Incorrect 14 ms 25436 KB Output isn't correct
22 Incorrect 14 ms 25368 KB Output isn't correct
23 Incorrect 14 ms 25512 KB Output isn't correct
24 Incorrect 18 ms 25500 KB Output isn't correct
25 Incorrect 15 ms 25436 KB Output isn't correct
26 Incorrect 18 ms 25436 KB Output isn't correct
27 Incorrect 15 ms 25436 KB Output isn't correct
28 Incorrect 17 ms 25496 KB Output isn't correct
29 Incorrect 14 ms 25436 KB Output isn't correct
30 Incorrect 14 ms 25436 KB Output isn't correct
31 Incorrect 14 ms 25412 KB Output isn't correct
32 Incorrect 15 ms 25312 KB Output isn't correct
33 Incorrect 25 ms 26312 KB Output isn't correct
34 Incorrect 25 ms 26460 KB Output isn't correct
35 Correct 52 ms 26468 KB Output is correct
36 Incorrect 28 ms 26716 KB Output isn't correct
37 Incorrect 28 ms 26712 KB Output isn't correct
38 Correct 78 ms 26544 KB Output is correct
39 Incorrect 44 ms 26960 KB Output isn't correct
40 Incorrect 33 ms 26964 KB Output isn't correct
41 Correct 104 ms 27088 KB Output is correct
42 Incorrect 45 ms 27476 KB Output isn't correct
43 Incorrect 57 ms 27292 KB Output isn't correct
44 Correct 118 ms 27308 KB Output is correct
45 Incorrect 60 ms 27820 KB Output isn't correct
46 Incorrect 51 ms 27728 KB Output isn't correct
47 Correct 159 ms 27732 KB Output is correct
48 Incorrect 46 ms 28240 KB Output isn't correct
49 Incorrect 51 ms 28332 KB Output isn't correct
50 Correct 164 ms 28244 KB Output is correct
51 Incorrect 52 ms 28752 KB Output isn't correct
52 Incorrect 61 ms 28576 KB Output isn't correct
53 Correct 229 ms 28752 KB Output is correct
54 Incorrect 56 ms 29268 KB Output isn't correct
55 Incorrect 75 ms 29268 KB Output isn't correct
56 Correct 260 ms 29268 KB Output is correct
57 Incorrect 79 ms 29864 KB Output isn't correct
58 Incorrect 86 ms 29868 KB Output isn't correct
59 Correct 294 ms 29936 KB Output is correct
60 Incorrect 84 ms 30380 KB Output isn't correct
61 Incorrect 90 ms 30396 KB Output isn't correct
62 Correct 341 ms 30648 KB Output is correct
63 Incorrect 86 ms 30388 KB Output isn't correct
64 Incorrect 280 ms 30380 KB Output isn't correct
65 Incorrect 261 ms 30532 KB Output isn't correct
66 Incorrect 86 ms 30288 KB Output isn't correct
67 Correct 117 ms 30288 KB Output is correct
68 Incorrect 85 ms 30808 KB Output isn't correct
69 Incorrect 95 ms 30804 KB Output isn't correct
70 Incorrect 83 ms 30688 KB Output isn't correct
71 Incorrect 78 ms 30644 KB Output isn't correct
72 Incorrect 84 ms 30800 KB Output isn't correct
73 Incorrect 110 ms 31060 KB Output isn't correct
74 Correct 133 ms 31060 KB Output is correct
75 Correct 147 ms 30908 KB Output is correct
76 Correct 153 ms 30940 KB Output is correct
77 Correct 155 ms 30916 KB Output is correct
78 Correct 178 ms 31060 KB Output is correct
79 Correct 134 ms 30880 KB Output is correct
80 Correct 143 ms 30912 KB Output is correct
81 Correct 167 ms 30800 KB Output is correct
82 Correct 135 ms 30800 KB Output is correct
83 Correct 165 ms 30908 KB Output is correct
84 Correct 152 ms 30800 KB Output is correct
85 Correct 153 ms 31256 KB Output is correct
86 Correct 188 ms 30940 KB Output is correct
87 Correct 167 ms 30892 KB Output is correct
88 Correct 189 ms 30872 KB Output is correct
89 Correct 207 ms 30848 KB Output is correct
90 Correct 197 ms 30628 KB Output is correct
91 Correct 187 ms 31056 KB Output is correct
92 Correct 186 ms 30804 KB Output is correct