답안 #554971

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
554971 2022-04-29T19:14:45 Z savackexp Mecho (IOI09_mecho) C++14
22 / 100
283 ms 16792 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
typedef long long ll;
typedef long double ld;
const int MOD=1e9+7;
const int MAX=2e5+1;/*
ll  binpow(ll  a, ll  b) {
    ld  res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }

    return res;
}
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);
}
*/
ll n  , k ;
ll dx[]={0 , 0 , 1, -1};
ll dy[]={1 , -1 , 0, 0};
char grid[805][805];
ll vis[805][805];
ll levelm[805][805];
ll levelh[805][805];
vector<pair<ll,ll>>hive;
bool valid(ll x , ll y)
{
    return x>=0 && y>=0 && x<n && y<n && grid[x][y]!='H' && grid[x][y]!='T';
}
bool valid1(ll x , ll y)
{
    return x>=0 && y>=0 && x<n && y<n  && grid[x][y]!='T';
}
pair<ll,ll>m , d;
bool check(ll u)
{
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                levelm[i][j]=1e18;
            }
        }
        memset(vis , 0 ,sizeof vis );
        queue< pair<ll,ll> >q;
        q.push({m.fi,m.se});
        vis[m.fi][m.se]=1;
        levelm[m.fi][m.se]=0;
        while(!q.empty())
        {
            pair<ll,ll>p=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                ll nx = p.fi +  dx[i];
                ll ny = p.se +  dy[i];
                if(!valid(nx,ny))continue;
                levelm[nx][ny]=min(levelm[p.fi][p.se]+1 ,levelm[nx][ny]);
                ll qe = (levelm[nx][ny])/k + (levelm[nx][ny]%k!=0);
                if(levelh[nx][ny] <= qe + u )continue;
                if(vis[nx][ny])continue;

                vis[nx][ny] = 1;
                q.push({nx , ny});

            }

        }

    if(levelm[d.fi][d.se] != 1e18)
    {
        return true;
    }
    return false;
}

void bfs(vector<pair<ll,ll>>h)
{
    queue<pair<ll,ll> >q;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            levelh[i][j]=1e18;
        }
    }
    for(int i=0;i<h.size();i++)
    {
        levelh[h[i].fi][h[i].se]=0;
        vis[h[i].fi][h[i].se]=1;
        q.push(h[i]);
    }
    while(!q.empty())
    {
        pair<ll,ll>p=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {

            ll nx = p.fi + dx[i];
            ll ny = p.se + dy[i];
            if(!valid1(nx,ny))continue;
            levelh[nx][ny] = min(levelh[p.fi][p.se]+1 ,levelh[nx][ny]);
            if(vis[nx][ny])continue;
            vis[nx][ny] = 1;
            q.push({nx , ny});
        }

    }
}





int main()
{

        fastio

        //freopen("gravity.in","r",stdin);
        //freopen("gravity.out","w",stdout);

        cin>>n>>k;
        for(int i=0;i<n;i++)
        {
            string s;
            cin>>s;
            for(int j=0;j<s.size();j++)
            {
                grid[i][j]=s[j];
                if(s[j]=='H')hive.pb({i,j});
                else if(s[j]=='M')m={i,j};
                else if(s[j]=='D')d={i,j};
            }
        }
        bfs(hive);
        memset(vis , 0 ,sizeof vis);
        ll l=0;
        ll r=1e18;
        ll ans=-1;
        while(l<=r)
        {
            ll mid=(l+r)/2;
            if(check(mid))
            {
                ans=mid;
                l=mid+1;
            }
            else r=mid-1;
        }
        cout<<ans<<endl;






































    return 0;
    }
/*
5 6
0 4 0
0 3 1
0 1 1
0 2 1
1 2 1
3 4 0

*/

Compilation message

mecho.cpp: In function 'void bfs(std::vector<std::pair<long long int, long long int> >)':
mecho.cpp:125:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  125 |     for(int i=0;i<h.size();i++)
      |                 ~^~~~~~~~~
mecho.cpp: In function 'int main()':
mecho.cpp:167:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  167 |             for(int j=0;j<s.size();j++)
      |                         ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 5332 KB Output is correct
2 Correct 9 ms 5332 KB Output is correct
3 Correct 10 ms 5332 KB Output is correct
4 Correct 11 ms 5460 KB Output is correct
5 Incorrect 10 ms 5472 KB Output isn't correct
6 Incorrect 11 ms 5492 KB Output isn't correct
7 Incorrect 229 ms 16296 KB Output isn't correct
8 Correct 15 ms 5460 KB Output is correct
9 Incorrect 12 ms 5544 KB Output isn't correct
10 Incorrect 11 ms 5536 KB Output isn't correct
11 Incorrect 10 ms 5532 KB Output isn't correct
12 Incorrect 11 ms 5972 KB Output isn't correct
13 Correct 11 ms 5844 KB Output is correct
14 Correct 13 ms 6016 KB Output is correct
15 Correct 11 ms 5588 KB Output is correct
16 Incorrect 12 ms 5596 KB Output isn't correct
17 Correct 20 ms 5640 KB Output is correct
18 Incorrect 12 ms 5636 KB Output isn't correct
19 Correct 11 ms 5588 KB Output is correct
20 Incorrect 13 ms 5704 KB Output isn't correct
21 Correct 12 ms 5800 KB Output is correct
22 Incorrect 11 ms 5720 KB Output isn't correct
23 Correct 11 ms 5844 KB Output is correct
24 Incorrect 11 ms 5896 KB Output isn't correct
25 Correct 12 ms 5988 KB Output is correct
26 Incorrect 12 ms 5972 KB Output isn't correct
27 Correct 11 ms 5972 KB Output is correct
28 Incorrect 11 ms 6044 KB Output isn't correct
29 Correct 15 ms 6100 KB Output is correct
30 Incorrect 13 ms 6104 KB Output isn't correct
31 Correct 13 ms 6156 KB Output is correct
32 Incorrect 12 ms 6152 KB Output isn't correct
33 Correct 25 ms 10068 KB Output is correct
34 Incorrect 26 ms 10092 KB Output isn't correct
35 Incorrect 60 ms 10084 KB Output isn't correct
36 Correct 32 ms 10768 KB Output is correct
37 Incorrect 30 ms 10708 KB Output isn't correct
38 Incorrect 64 ms 10712 KB Output isn't correct
39 Correct 42 ms 11348 KB Output is correct
40 Incorrect 42 ms 11436 KB Output isn't correct
41 Incorrect 96 ms 11436 KB Output isn't correct
42 Correct 53 ms 12100 KB Output is correct
43 Incorrect 44 ms 12116 KB Output isn't correct
44 Incorrect 123 ms 12116 KB Output isn't correct
45 Correct 51 ms 12756 KB Output is correct
46 Incorrect 53 ms 12772 KB Output isn't correct
47 Incorrect 133 ms 12756 KB Output isn't correct
48 Correct 54 ms 13448 KB Output is correct
49 Incorrect 58 ms 13412 KB Output isn't correct
50 Incorrect 179 ms 13396 KB Output isn't correct
51 Correct 67 ms 14120 KB Output is correct
52 Incorrect 72 ms 14156 KB Output isn't correct
53 Incorrect 187 ms 14132 KB Output isn't correct
54 Correct 67 ms 14716 KB Output is correct
55 Incorrect 68 ms 14708 KB Output isn't correct
56 Incorrect 231 ms 14792 KB Output isn't correct
57 Correct 79 ms 15416 KB Output is correct
58 Incorrect 81 ms 15456 KB Output isn't correct
59 Incorrect 245 ms 15468 KB Output isn't correct
60 Correct 91 ms 16120 KB Output is correct
61 Incorrect 82 ms 16016 KB Output isn't correct
62 Incorrect 283 ms 16136 KB Output isn't correct
63 Incorrect 170 ms 16076 KB Output isn't correct
64 Incorrect 265 ms 16136 KB Output isn't correct
65 Incorrect 271 ms 16136 KB Output isn't correct
66 Correct 197 ms 16084 KB Output is correct
67 Correct 193 ms 16028 KB Output is correct
68 Incorrect 107 ms 16128 KB Output isn't correct
69 Incorrect 115 ms 16124 KB Output isn't correct
70 Incorrect 94 ms 16256 KB Output isn't correct
71 Incorrect 107 ms 16196 KB Output isn't correct
72 Correct 99 ms 16196 KB Output is correct
73 Correct 130 ms 16768 KB Output is correct
74 Incorrect 157 ms 16764 KB Output isn't correct
75 Incorrect 164 ms 16760 KB Output isn't correct
76 Incorrect 171 ms 16680 KB Output isn't correct
77 Incorrect 165 ms 16716 KB Output isn't correct
78 Correct 171 ms 16588 KB Output is correct
79 Incorrect 144 ms 16684 KB Output isn't correct
80 Incorrect 154 ms 16792 KB Output isn't correct
81 Incorrect 170 ms 16744 KB Output isn't correct
82 Incorrect 146 ms 16780 KB Output isn't correct
83 Incorrect 191 ms 16536 KB Output isn't correct
84 Incorrect 189 ms 16604 KB Output isn't correct
85 Incorrect 183 ms 16588 KB Output isn't correct
86 Incorrect 198 ms 16596 KB Output isn't correct
87 Incorrect 195 ms 16716 KB Output isn't correct
88 Incorrect 188 ms 16480 KB Output isn't correct
89 Incorrect 212 ms 16472 KB Output isn't correct
90 Incorrect 246 ms 16392 KB Output isn't correct
91 Incorrect 213 ms 16460 KB Output isn't correct
92 Incorrect 209 ms 16496 KB Output isn't correct