ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

201409-4 最优配餐

2020-08-24 18:31:57  阅读:189  来源: 互联网

标签:MAP int MAX 201409 num 配餐 最优 include SIZE


实现

#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);

}

标签:MAP,int,MAX,201409,num,配餐,最优,include,SIZE
来源: https://www.cnblogs.com/amonqsq/p/13555474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有