답안 #554790

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
554790 2022-04-29T12:17:57 Z roctes7 Mecho (IOI09_mecho) C++17
76 / 100
465 ms 26436 KB
#include<bits/stdc++.h>
using namespace std;
#define in insert
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl "\n"
#define Endl "\n"
#define ENDL "\n"
#define fi first
#define se second
#define be  begin()
#define en  end()
#define pb push_back
#define mpa make_pair
typedef long long ll;
typedef long double ld;
const int MOD=1e9+7;
const int MAX=2e5+1;

int n,s;
string arr[802][802];
bool vist[802][802];
int mechoDist[802][802];
int BeesDist[802][802];
pair<int,int> mecho;
pair<int,int> home;

int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};

bool valid (int x,int y){
return x>=1&&x<=n&&y>=1&&y<=n&&!vist[x][y]&&arr[x][y]!="T";
}


bool check =false;
void bfs (int i,int j ,int val){
vist[i][j]=true;
queue<pair<int,int>>q;
q.push(mpa(i,j));

while (!q.empty()){
    auto p =q.front();
    int x = p.fi;
    int y = p.se;
    q.pop();
if(x==home.fi&&y==home.se)check=true;

 if(val+mechoDist[x][y]>=BeesDist[x][y])continue;


for (int w=0;w<4;w++){
        int nx = x+dx[w];
        int ny = y+dy[w];

        if(valid(nx,ny)){
          vist[nx][ny]=true;
          q.push(mpa(nx,ny));
        }
    }
}



}

int main(){

fastio
//freopen("11.in","r",stdin);
//freopen("cl.out","w",stdout);

cin>>n>>s;


for (int i=1;i<=n;i++){
    string s;
    cin>>s;
    for (int j=1;j<=n;j++){
        arr[i][j]=s[j-1];

        if(arr[i][j]=="M")mecho=mpa(i,j);
        else if (arr[i][j]=="D")home = mpa(i,j);
    }
}

queue <pair<int,int>> q;
q.push(mecho);
vist[mecho.fi][mecho.se]=true;

while(!q.empty()){
    auto p = q.front();
    int x = p.fi;
    int y = p.se;

    q.pop();

    for (int i=0;i<4;i++){
        int nx = x+dx[i];
        int ny = y+dy[i];

        if(valid(nx,ny)&&arr[nx][ny]!="H"){
            mechoDist[nx][ny]=mechoDist[x][y]+1;
            vist[nx][ny]=true;
            q.push(mpa(nx,ny));
        }
    }

}


for (int i=1;i<=n;i++)for(int j=1;j<=n;j++){
mechoDist[i][j]=mechoDist[i][j]/s;
vist[i][j]=false;
}



for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){
    if(arr[i][j]=="H"){
            q.push(mpa(i,j));
            vist[i][j]=true;
    }
}



while(!q.empty()){
    auto p = q.front();
    int x = p.fi;
    int y = p.se;
    q.pop();

    for (int i=0;i<4;i++){
        int nx = x+dx[i];
        int ny = y+dy[i];

        if(valid(nx,ny)&&arr[nx][ny]!="D"&&arr[nx][ny]!="H"){
            BeesDist[nx][ny]=BeesDist[x][y]+1;
            vist[nx][ny]=true;
            q.push(mpa(nx,ny));
        }
    }

}


/*cout<<endl<<endl;
for(int i=1;i<=n;i++){for (int j=1;j<=n;j++){
        if(arr[i][j]=="G")
     cout<<mechoDist[i][j];
     else cout<<arr[i][j];
}
cout<<endl;
}

cout<<endl<<endl;
for(int i=1;i<=n;i++){for (int j=1;j<=n;j++){
    cout<<BeesDist[i][j];
}
cout<<endl;
}*/




int l=0;
int r = 1e9;
int ans =-1;
while (l<=r){
    int mid = (l+r)/2;
    for (int i=1;i<=n;i++)for(int j=1;j<=n;j++){
 vist[i][j]=false;
}
check=false;
bfs(mecho.fi,mecho.se,mid);

if(check){
    l=mid+1;
    ans = mid;

} else {
r=mid-1;
}



}

cout<<ans;
return 0;


}





unsigned long long power(unsigned long long x,
                                ll y, ll p)
{
    unsigned long long res = 1; // Initialize result

    x = x % p; // Update x if it is more than or
    // equal to p

    while (y > 0)
    {

        // If y is odd, multiply x with result
        if (y & 1)
            res = (res * x) % p;

        // y must be even now
        y = y >> 1; // y = y/2
        x = (x * x) % p;
    }
    return res;
}

unsigned long long modInverse(unsigned long long n,
                                            ll p)
{
    return power(n, p - 2, p);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 20436 KB Output is correct
2 Correct 12 ms 20436 KB Output is correct
3 Correct 10 ms 20488 KB Output is correct
4 Correct 11 ms 20508 KB Output is correct
5 Correct 10 ms 20436 KB Output is correct
6 Correct 13 ms 20436 KB Output is correct
7 Correct 326 ms 26188 KB Output is correct
8 Correct 12 ms 20564 KB Output is correct
9 Correct 11 ms 20564 KB Output is correct
10 Correct 11 ms 20584 KB Output is correct
11 Correct 11 ms 20564 KB Output is correct
12 Correct 11 ms 20812 KB Output is correct
13 Correct 11 ms 20820 KB Output is correct
14 Correct 12 ms 20820 KB Output is correct
15 Correct 11 ms 20564 KB Output is correct
16 Correct 10 ms 20544 KB Output is correct
17 Correct 10 ms 20564 KB Output is correct
18 Correct 12 ms 20564 KB Output is correct
19 Correct 10 ms 20656 KB Output is correct
20 Correct 11 ms 20564 KB Output is correct
21 Correct 11 ms 20692 KB Output is correct
22 Correct 11 ms 20760 KB Output is correct
23 Correct 11 ms 20720 KB Output is correct
24 Correct 11 ms 20832 KB Output is correct
25 Correct 12 ms 20800 KB Output is correct
26 Correct 12 ms 20820 KB Output is correct
27 Correct 11 ms 20908 KB Output is correct
28 Correct 12 ms 20860 KB Output is correct
29 Correct 11 ms 20948 KB Output is correct
30 Correct 12 ms 20948 KB Output is correct
31 Correct 11 ms 21012 KB Output is correct
32 Correct 11 ms 21012 KB Output is correct
33 Correct 26 ms 22832 KB Output is correct
34 Correct 29 ms 22936 KB Output is correct
35 Incorrect 57 ms 22880 KB Output isn't correct
36 Correct 29 ms 23284 KB Output is correct
37 Correct 31 ms 23288 KB Output is correct
38 Incorrect 104 ms 23216 KB Output isn't correct
39 Correct 34 ms 23624 KB Output is correct
40 Correct 35 ms 23560 KB Output is correct
41 Incorrect 118 ms 23672 KB Output isn't correct
42 Correct 38 ms 23984 KB Output is correct
43 Correct 37 ms 23948 KB Output is correct
44 Incorrect 173 ms 23884 KB Output isn't correct
45 Correct 53 ms 24240 KB Output is correct
46 Correct 46 ms 24364 KB Output is correct
47 Incorrect 202 ms 24380 KB Output isn't correct
48 Correct 67 ms 24692 KB Output is correct
49 Correct 60 ms 24712 KB Output is correct
50 Incorrect 248 ms 24728 KB Output isn't correct
51 Correct 64 ms 25052 KB Output is correct
52 Correct 61 ms 25056 KB Output is correct
53 Incorrect 294 ms 25096 KB Output isn't correct
54 Correct 69 ms 25400 KB Output is correct
55 Correct 77 ms 25384 KB Output is correct
56 Incorrect 341 ms 25348 KB Output isn't correct
57 Correct 69 ms 25728 KB Output is correct
58 Correct 71 ms 25736 KB Output is correct
59 Incorrect 373 ms 25680 KB Output isn't correct
60 Correct 82 ms 26124 KB Output is correct
61 Correct 89 ms 26052 KB Output is correct
62 Incorrect 436 ms 26132 KB Output isn't correct
63 Correct 299 ms 26132 KB Output is correct
64 Correct 465 ms 26052 KB Output is correct
65 Correct 445 ms 26132 KB Output is correct
66 Correct 355 ms 26052 KB Output is correct
67 Correct 304 ms 26128 KB Output is correct
68 Correct 183 ms 26280 KB Output is correct
69 Correct 168 ms 26160 KB Output is correct
70 Correct 148 ms 26152 KB Output is correct
71 Correct 164 ms 26100 KB Output is correct
72 Correct 139 ms 26156 KB Output is correct
73 Correct 171 ms 26328 KB Output is correct
74 Correct 211 ms 26412 KB Output is correct
75 Correct 222 ms 26316 KB Output is correct
76 Correct 236 ms 26316 KB Output is correct
77 Correct 243 ms 26436 KB Output is correct
78 Correct 236 ms 26380 KB Output is correct
79 Correct 204 ms 26368 KB Output is correct
80 Correct 207 ms 26368 KB Output is correct
81 Correct 235 ms 26388 KB Output is correct
82 Correct 193 ms 26376 KB Output is correct
83 Correct 273 ms 26396 KB Output is correct
84 Correct 275 ms 26344 KB Output is correct
85 Correct 260 ms 26312 KB Output is correct
86 Correct 271 ms 26316 KB Output is correct
87 Correct 336 ms 26336 KB Output is correct
88 Correct 289 ms 26268 KB Output is correct
89 Correct 313 ms 26288 KB Output is correct
90 Correct 320 ms 26288 KB Output is correct
91 Correct 292 ms 26308 KB Output is correct
92 Correct 319 ms 26420 KB Output is correct