답안 #554785

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
554785 2022-04-29T11:50:17 Z roctes7 Mecho (IOI09_mecho) C++17
71 / 100
475 ms 27768 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];
bool finished[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();
//cout<<x<<" "<<y<<" "<<val<<endl;
if(x==home.fi&&y==home.se)check=true;

if(val+mechoDist[x][y]-BeesDist[x][y]==0&&finished[x][y])continue;
else if(val+mechoDist[x][y]-BeesDist[x][y]>0)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)){
            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++){

    if (mechoDist[i][j]%s==0)finished[i][j]=true;

    mechoDist[i][j]=mechoDist[i][j]/s+(mechoDist[i][j]%s==0?0:1);


    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)){
            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 10 ms 20436 KB Output is correct
2 Correct 11 ms 20436 KB Output is correct
3 Correct 11 ms 20468 KB Output is correct
4 Correct 11 ms 20472 KB Output is correct
5 Correct 11 ms 20476 KB Output is correct
6 Correct 13 ms 20564 KB Output is correct
7 Correct 310 ms 27508 KB Output is correct
8 Correct 11 ms 20564 KB Output is correct
9 Correct 11 ms 20524 KB Output is correct
10 Correct 11 ms 20604 KB Output is correct
11 Correct 12 ms 20548 KB Output is correct
12 Incorrect 11 ms 20948 KB Output isn't correct
13 Correct 11 ms 20848 KB Output is correct
14 Correct 13 ms 20948 KB Output is correct
15 Correct 10 ms 20604 KB Output is correct
16 Correct 11 ms 20564 KB Output is correct
17 Correct 11 ms 20680 KB Output is correct
18 Correct 12 ms 20600 KB Output is correct
19 Correct 11 ms 20644 KB Output is correct
20 Correct 11 ms 20596 KB Output is correct
21 Correct 11 ms 20720 KB Output is correct
22 Correct 11 ms 20768 KB Output is correct
23 Correct 11 ms 20820 KB Output is correct
24 Correct 13 ms 20884 KB Output is correct
25 Correct 11 ms 20948 KB Output is correct
26 Correct 13 ms 20916 KB Output is correct
27 Correct 11 ms 20912 KB Output is correct
28 Correct 13 ms 20948 KB Output is correct
29 Correct 12 ms 20948 KB Output is correct
30 Correct 12 ms 20948 KB Output is correct
31 Correct 12 ms 20988 KB Output is correct
32 Correct 12 ms 20992 KB Output is correct
33 Correct 24 ms 23216 KB Output is correct
34 Correct 27 ms 23380 KB Output is correct
35 Incorrect 86 ms 23336 KB Output isn't correct
36 Correct 30 ms 23676 KB Output is correct
37 Correct 30 ms 23768 KB Output is correct
38 Incorrect 100 ms 23780 KB Output isn't correct
39 Correct 41 ms 24144 KB Output is correct
40 Correct 35 ms 24208 KB Output is correct
41 Incorrect 136 ms 24212 KB Output isn't correct
42 Correct 37 ms 24560 KB Output is correct
43 Correct 39 ms 24648 KB Output is correct
44 Incorrect 163 ms 24608 KB Output isn't correct
45 Correct 39 ms 25088 KB Output is correct
46 Correct 44 ms 25100 KB Output is correct
47 Incorrect 200 ms 25104 KB Output isn't correct
48 Correct 45 ms 25548 KB Output is correct
49 Correct 59 ms 25532 KB Output is correct
50 Incorrect 248 ms 25564 KB Output isn't correct
51 Correct 55 ms 25988 KB Output is correct
52 Correct 59 ms 25916 KB Output is correct
53 Incorrect 274 ms 26016 KB Output isn't correct
54 Correct 65 ms 26440 KB Output is correct
55 Correct 74 ms 26440 KB Output is correct
56 Incorrect 364 ms 26460 KB Output isn't correct
57 Correct 70 ms 26828 KB Output is correct
58 Correct 65 ms 26884 KB Output is correct
59 Incorrect 361 ms 26932 KB Output isn't correct
60 Correct 75 ms 27376 KB Output is correct
61 Correct 77 ms 27300 KB Output is correct
62 Incorrect 441 ms 27456 KB Output isn't correct
63 Correct 283 ms 27392 KB Output is correct
64 Correct 475 ms 27392 KB Output is correct
65 Correct 461 ms 27392 KB Output is correct
66 Correct 316 ms 27508 KB Output is correct
67 Correct 302 ms 27372 KB Output is correct
68 Correct 166 ms 27420 KB Output is correct
69 Correct 160 ms 27416 KB Output is correct
70 Correct 141 ms 27384 KB Output is correct
71 Correct 135 ms 27384 KB Output is correct
72 Correct 128 ms 27320 KB Output is correct
73 Correct 156 ms 27676 KB Output is correct
74 Correct 200 ms 27636 KB Output is correct
75 Correct 191 ms 27668 KB Output is correct
76 Correct 186 ms 27768 KB Output is correct
77 Correct 219 ms 27668 KB Output is correct
78 Correct 195 ms 27628 KB Output is correct
79 Correct 166 ms 27568 KB Output is correct
80 Correct 206 ms 27572 KB Output is correct
81 Correct 181 ms 27612 KB Output is correct
82 Correct 193 ms 27724 KB Output is correct
83 Correct 277 ms 27584 KB Output is correct
84 Correct 247 ms 27488 KB Output is correct
85 Correct 253 ms 27524 KB Output is correct
86 Correct 254 ms 27596 KB Output is correct
87 Correct 243 ms 27492 KB Output is correct
88 Correct 291 ms 27524 KB Output is correct
89 Correct 266 ms 27552 KB Output is correct
90 Correct 298 ms 27580 KB Output is correct
91 Correct 291 ms 27468 KB Output is correct
92 Correct 287 ms 27468 KB Output is correct