Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <cstring>
- #include <cmath>
- #include <climits>
- #include <sstream>
- #include <numeric>
- #include <iomanip>
- #define pb push_back
- #define ill long long int
- #define ull unsigned long long int
- #define pii pair<int,int>
- #define s(n) scanf("%d", &n)
- #define gc getchar_unlocked
- #define ss(n) scanf("%s", n)
- #define sl(n) scanf("%lld", &n)
- #define pb push_back
- #define F(i,a,b) for(int i=(a); i<(b); i++)
- #define mem(a, v) memset(a, v, sizeof(a))
- #define all(v) v.begin(),v.end()
- #define fr first
- #define sc second
- #define mp make_pair
- #define deb cout <<"coink" <<endl
- #define mod 1000000007
- #define MAX 500100
- #define inf (int)1e9
- #define sq(x) ((x)*(x))
- #define sqrtsum(x, y) sqrt((x)*(x)+(y)*(y))
- #define abs(x) (x>0?x:-(x))
- #define prin(v) forall(i, 0, v.size()) cout << v[i] <<" ";cout <<endl;
- #define input freopen("in","r", stdin)
- #define output freopen("out","w", stdout)
- #define iost ios_base::sync_with_stdio(false)
- using namespace std;
- int dx[] = {1, -1, 0, 0};
- int dy[] = {0, 0, -1 ,1};
- void swap(int &a, int &b) {int t = a;a = b;b = t;}
- int n, m, sx, sy, ddx, ddy, kk;
- vector<string> v;
- int vis[1100][1100];
- int dis[1100][1100];
- #define pip pair<int, pii>
- bool check() {
- priority_queue< pip , vector<pip >, greater<pip> > q;
- q.push(mp(0, mp(sx, sy)));
- F(i, 0,n) F(j, 0,m) dis[i][j] = inf;
- mem(vis,0);
- while(!q.empty()) {
- pair<int, pii > u = q.top();
- // cout << "cost" <<u.fr <<" " <<u.sc.fr <<" " << u.sc.sc <<" " << ddx <<" " << ddy <<endl;
- q.pop();
- if(u.sc.fr == ddx && u.sc.sc == ddy) return true;;
- if(u.fr >= kk) continue;
- if(v[u.sc.fr][u.sc.sc] == 'F') {
- if(vis[u.sc.fr][u.sc.sc]) continue;
- vis[u.sc.fr][u.sc.sc] = 1;
- // cout << "cost" <<u.fr <<" " <<u.sc.fr <<" " << u.sc.sc <<" " << ddx <<" " << ddy <<endl;
- F(i, 0, 4) {
- int x = u.sc.fr+dx[i];
- int y = u.sc.sc+dy[i];
- if(x <0 || y < 0 || x >= n || y >= m) continue;
- if(vis[x][y]) continue;
- if(v[x][y] == '.') {
- q.push(mp(1, mp(x, y)));
- } else {
- q.push(mp(0, mp(x, y)));
- }
- }
- } else {
- if(dis[u.sc.fr][u.sc.sc] <= u.fr) continue;
- // cout << "cost" <<u.fr <<" " <<u.sc.fr <<" " << u.sc.sc <<" " << ddx <<" " << ddy <<endl;
- dis[u.sc.fr][u.sc.sc] = u.fr;
- F(i, 0, 4) {
- int x = u.sc.fr+dx[i];
- int y = u.sc.sc+dy[i];
- if(x <0 || y < 0 || x >= n || y >= m) continue;
- if(vis[x][y]) continue;
- if(v[x][y] == '.') {
- q.push(mp(u.fr+1, mp(x, y)));
- } else {
- q.push(mp(0, mp(x, y)));
- }
- }
- }
- }
- return false;
- }
- int main(){
- // input;
- cin >> n >> m>> kk;
- cin >> sx >> sy >> ddx >> ddy;
- sx--; sy--; ddx--; ddy--;
- v.resize(n);
- F(i, 0,n)
- cin >> v[i];
- if(check()) {
- cout << "Hello, Deimos!" <<endl;
- return 0;
- }
- cout <<"Dire victory" <<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment