zoukankan      html  css  js  c++  java
  • Escape(glitch)

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<cstring>
    
    using namespace std;
    
    const int N = 110;
    
    char os[] = {'N', 'S', 'W', 'E'};
    int dx[] = {-1, 1, 0, 0, 0}, dy[] = {0, 0, -1, 1, 0};
    
    int st[N][N];
    int m, n, c, pw;
    
    struct bullet{
        int o; // 方向
        int x, y; // 位置
        int s; // 速度
        
        int valid;
        
        void update(){
            for(int i = 0; i < s; i ++){
                x += dx[o], y += dy[o];
                if(st[x][y]) valid = 0;
                if(x < 0 || y < 0 || x > n || y > m) valid = 0;
            }
        }
        
    };
    
    struct castle{
      int o; // 方向
      int x, y; // 位置
      int s; // 速度
      int t; // 间隔
      
      int p; // 当前过了多长时间
      
      castle(int a, int b, int c, int d, int e){
          o = a, t = b, s = c, x = d, y = e;
          p = 0;
      }
      
      void add(){
          p ++;
      }
      
      int check(){
          if(p == t){
              p = 0;
              return 1;
          }
          return 0;
      }
      
      bullet get(){
          bullet res = {o, x, y, s, 1};
          // res.update();
          return res;
      }
    };
    
    struct node{
        int x, y;
        int pw;
    };
    
    //node pre[N][N][20];
    
    vector<castle> castles;
    vector<bullet> bullets;
    
    
    
    int bfs(){
        queue<node> q;
        q.push({0, 0, pw});
        st[0][0] = 1;
    
        //pre[0][0][pw] = {-1, -1, -1};
        
        int pwt = pw;
        int cur = -1;
        while(q.size()){
            node h = q.front();
            q.pop();
            
            if(h.pw == 0) continue;
            
            if(cur == -1 || h.pw != cur){ // 预测下一秒的战场状况
                cur = h.pw;
                for(int i = 0; i < bullets.size(); i ++) bullets[i].update();
                for(int i = 0; i < castles.size(); i ++){
                    castles[i].add();
                    if(castles[i].check()) 
                        bullets.push_back(castles[i].get());
                }
            }
                    
            for(int i = 0; i < 5; i ++){
                int x = h.x + dx[i], y = h.y + dy[i];
                if(x < 0 || y < 0 || x > n || y > m) continue;
                if(st[x][y] && (x != h.x || y != h.y)) continue;
                int blt = 0;
                for(int j = 0; j < bullets.size(); j ++)
                    if(bullets[j].valid && bullets[j].x == x && bullets[j].y == y){
                        blt = 1;
                        break;
                    }
                if(blt) continue;
                st[x][y] = 1;
                q.push({x, y, h.pw - 1});
                
                //pre[x][y][h.pw - 1] = h;
                
                if(x == n && y == m){
                    // node k = {x, y, h.pw - 1};
                    // while(pre[k.x][k.y][k.pw].x != -1){
                    //     cout << k.x << ' ' << k.y << ' ' << k.pw << endl;
                    //     k = pre[k.x][k.y][k.pw];
                    // }
                    return pwt - h.pw + 1;
                }
            }
        }
        
        return -1;
    }
    
    int main(){
        while(cin >> n >> m >> c >> pw){
            castles.clear();
            bullets.clear();
            
            memset(st, 0, sizeof st);
            
            for(int i = 0; i < c; i ++){
                char c;
                int o, t, v, x, y;
                cin >> c >> t >> v >> x >> y;
                if(c == 'N') o = 0;
                if(c == 'S') o = 1;
                if(c == 'W') o = 2;
                if(c == 'E') o = 3;
                st[x][y] = 1;
                castles.push_back(castle(o, t, v, x, y));
            }
            
            int res = bfs();
            if(~res) cout << res << endl;
            else cout << "Bad luck!" << endl;
        }
        
        return 0;
    }
    
  • 相关阅读:
    css 学习笔记 菜鸟
    html学习 菜鸟
    flask 杂记2
    logging 为全局的日志工具对象添加日志记录器
    flask 框架 转载:https://cloud.tencent.com/developer/article/1465968
    flask 框架 转载:https://cloud.tencent.com/developer/article/1465949
    flask blueprint
    [ZJOI2005]午餐
    [ZJOI2006]皇帝的烦恼
    数位dp小练
  • 原文地址:https://www.cnblogs.com/tomori/p/15349622.html
Copyright © 2011-2022 走看看