zoukankan      html  css  js  c++  java
  • 201409-4 最优配餐

    实现

    #include <cstdio>
    #include <queue>
    #include <vector>
    
    using namespace std;
    
    #define MAX_MAP_SIZE 0x3ff
    #define MAX_POINT_NUM 0xff000
    
    struct point {
        int x;
        int y;
    };
    
    struct order_point {
        int x,y;
        int order_num;
    };
    
    int dx_dy[4][2] = {
        {1,0},
        {-1,0},
        {0,1},
        {0,-1}
    };
    
    int map[MAX_MAP_SIZE][MAX_MAP_SIZE];
    bool visit[MAX_MAP_SIZE][MAX_MAP_SIZE];
    queue<point> stores;
    vector<order_point> customs;
    
    int map_size, store_num, custom_num, stuck_num;
    
    inline bool inRange(int x, int y) {
        if (x >= 1 && x <= map_size 
            && y >= 1 && y <= map_size) {
            return true;
        } else {
            return false;
        }
    }
    
    int main() {
        
        scanf("%d%d%d%d", &map_size, &store_num, &custom_num, &stuck_num);
        
        for (int i = 0;i < store_num;++i) {
            point store;
            scanf("%d%d", &store.x, &store.y);
            stores.push(store);
            visit[store.x][store.y] = true;
        }
    
        for (int i = 0;i < custom_num;++i) {
            order_point custom;
            scanf("%d%d%d",&custom.x,&custom.y,&custom.order_num);
            customs.push_back(custom);
        }
        
        for (int i = 0;i < stuck_num;++i) {
            int x_tmp, y_tmp;
            scanf("%d%d", &x_tmp, &y_tmp);
            map[x_tmp][y_tmp] = -1;
            visit[x_tmp][y_tmp] = true;
        }
    
        while(!stores.empty()) {
            point cur_point = stores.front();
            stores.pop();
            
            for(int i = 0;i < 4;++i) {
                
                int cur_x = cur_point.x + dx_dy[i][0];
                int cur_y = cur_point.y + dx_dy[i][1];
    
                if (inRange(cur_x,cur_y) 
                    && !visit[cur_x][cur_y] 
                    && map[cur_x][cur_y] != -1) {
                    point point_tmp;
                    point_tmp.x = cur_x;
                    point_tmp.y = cur_y;
                    stores.push(point_tmp);
                    map[cur_x][cur_y] = map[cur_point.x][cur_point.y] + 1;
                    visit[cur_x][cur_y] = true;
                }
    
            }
    
        }
    
        long long res = 0;
        for (int i = 0;i < customs.size();++i) {
            res += map[customs[i].x][customs[i].y] * customs[i].order_num;
        }
    
        printf("%lld",res);
    
    }
    
  • 相关阅读:
    每天都感觉很疲劳
    如果你决定要自己营销
    昨天忘记写日记了,今天补充一下!
    终于不用再去北仑了
    良好的程序架构
    最近的天气反复无常
    就这么着
    C# Socket 入门3 UPD
    让程序只启动一次 Mutex
    C# Socket 入门2
  • 原文地址:https://www.cnblogs.com/amonqsq/p/13555474.html
Copyright © 2011-2022 走看看