Day 7

题目描述

栋栋最近开了一家餐饮连锁店,提供外卖服务。

随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。

栋栋的连锁店所在的区域可以看成是一个 \(n×n\)的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。

方格图中的线表示可以行走的道路,相邻两个格点的距离为 \(1\)。

栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。

送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费 \(1\) 块钱。

每个客户的需求都可以由栋栋的任意分店配送,每个分店没有配送总量的限制。

现在你得到了栋栋的客户的需求,请问在最优的送餐方式下,送这些餐需要花费多大的成本。

输入格式

输入的第一行包含四个整数 \(n,m,k,d\),分别表示方格图的大小、栋栋的分店数量、客户的数量,以及不能经过的点的数量。

接下来 \(m\) 行,每行两个整数 \(x_i,y_i\)

,表示栋栋的一个分店在方格图中的横坐标和纵坐标。

接下来 \(k\) 行,每行三个整数 \(x_i,y_i,c_i\),分别表示每个客户在方格图中的横坐标、纵坐标和订餐的量。(注意,可能有多个客户在方格图中的同一个位置)

接下来 \(d\) 行,每行两个整数,分别表示每个不能经过的点的横坐标和纵坐标。

输出格式

输出一个整数,表示最优送餐方式下所需要花费的成本。

数据范围

前 \(30%\) 的评测用例满足:\(1≤n≤20\)。

前 \(60%\) 的评测用例满足:\(1≤n≤100\)。

所有评测用例都满足:\(1≤n≤1000,1≤m,k,d≤n^2,1≤x_i,y_i≤n\)。

可能有多个客户在同一个格点上。

每个客户的订餐量不超过 \(1000\),每个客户所需要的餐都能被送到。

输入样例:

10 2 3 3
1 1
8 8
1 5 1
2 3 3
6 7 2
1 2
2 2
6 8

输出样例:

29

题目分析

\(bfs\) 找到到各点的最短路,计算费用即可

C++ 代码

注: 建议用scanf 读取,不然会\(TLE\),不然就和我一样关闭流同步

#include <bits/stdc++.h>

using namespace std;

const int N = 1010;

typedef pair<int, int> PII;

int dist[N][N] , g[N][N];
pair<PII , int> cus[N * N];
bool st[N][N];
int n , m , k, d;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; int main()
{
ios::sync_with_stdio(false);
cin.tie(0) , cout.tie(0); cin >> n >> m >> k >> d;
queue<pair<int , PII>> q;
while (m -- )
{
int x , y;
cin >> x >> y;
q.push({0 , {x ,y}});
st[x][y] = true;
} for(int i = 0 ; i < k ; i ++)
{
int x , y , c;
cin >> x >> y >> c;
cus[i] = {{x , y} , c};
} while(d --)
{
int x , y;
cin >> x >> y;
g[x][y] = 1;
} while(q.size())
{
auto t = q.front();
q.pop();
int dis = t.first , x = t.second.first , y = t.second.second;
for(int i = 0 ; i < 4 ; i ++)
{
int tx = x + dx[i] , ty = y + dy[i];
if(tx <= 0 || ty <= 0 || tx > n || ty > n || g[tx][ty]) continue;
if(st[tx][ty]) continue;
st[tx][ty] = true;
dist[tx][ty] = dis + 1;
q.push({dis + 1 , {tx , ty}});
}
} long long res = 0;
for(int i = 0 ; i < k ; i ++)
{
// cout << dist[cus[i].first.first][cus[i].first.second] << '\n';
res += dist[cus[i].first.first][cus[i].first.second] * cus[i].second;
} cout << res << '\n'; return 0;
}

Day7 备战CCF-CSP练习的更多相关文章

  1. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  2. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  3. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  4. CCF CSP 201703

    CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...

  5. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  6. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  7. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  8. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  9. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  10. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

随机推荐

  1. STM32真的是很落后吗?

    STM32真的是很落后吗? 作为一名嵌入式开发老兵,我不止一次听到有人说"STM32已经过时了",尤其是那些刚入门或者看了几篇文章的新手.每当听到这样的言论,我都忍不住想笑,但又有 ...

  2. 代码随想录第十八天 | Leecode 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

    530. 二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:roo ...

  3. 如何反向绘制出 .NET程序 异步方法调用栈

    一:背景 1. 讲故事 这个问题源于给训练营里的一位朋友分析的卡死dump,在分析期间我需要知道某一个异步方法的调用栈,但程序是 .framework 4.8 ,没有sos后续版本独有的 !dumpa ...

  4. 私人问卷收集系统-Surveyking问卷收集系统

    前言 但凡提及问卷收集系统,问卷星与腾讯问卷通常都为大家首选问卷调查系统. 担心数据安全,海量问卷管理不便,工作流创建困难?快速部署自有问卷调查系统开始你的问卷调查之旅. 无论是问卷调查,考试系统,公 ...

  5. codeup之Day of Week(给定日期判断周几

    题目描述 We now use the Gregorian style of dating in Russia. The leap years are years with number divisi ...

  6. length与capacity

    package javaBasic; public class DifferenceLengthCapacity { public static void main(String[] args) { ...

  7. Win32汇编学习笔记06.APIHook

    Win32汇编学习笔记06.APIHook-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net api hook 称为 api 钩子,也称为 内联apihook 我们程 ...

  8. Java catch多重异常捕获

    摘要:Java中多重异常捕获机制可以更加简洁.有效地处理多个异常,提高了程序的鲁棒性,是编写高质量代码的重要技巧之一.   小编在<浅谈Java异常处理机制>中梳理了异常处理机制,在< ...

  9. 机器学习中的"食材挑选术":特征选择方法

    想象你要做一道美食,面对琳琅满目的食材,优秀的厨师不会把所有原料都扔进锅里,而是会选择最适合的几种. 在机器学习中,特征选择就是这个挑选过程,从原始数据中选择对预测目标最有用的特征(列),就像挑选优质 ...

  10. 使用Oracle数据库的递归查询语句生成菜单树

    SQL 格式 SELECT * FROM TABLE WHERE [...结果过滤语句] START WITH [...递归开始条件] CONNECT BY PRIOR [...递归执行条件] 查询所 ...