首页 > 其他分享 >Day7 备战CCF-CSP练习

Day7 备战CCF-CSP练习

时间:2024-10-14 08:51:58浏览次数:8  
标签:tx ty int Day7 栋栋 客户 方格 CCF CSP

Day 7

题目描述

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

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

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

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

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

p41.png

送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费 \(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;
}

标签:tx,ty,int,Day7,栋栋,客户,方格,CCF,CSP
From: https://www.cnblogs.com/mathblog/p/18463380

相关文章

  • 2024/9/16 CSP-S模拟赛试题
    A这题是很有意思的一个题,思路就是你考虑kt的位置只可能在四个角,因为这种情况下,他的距离才会最远对吧,所以你就暴力找另一个人fengwu的点的位置,然后计算他们之间的距离然后你求一个\(\max\)即可,然后记录一下这些\(\max\)的值,最后排个序就好了。代码:#include<bits/stdc++.h>usi......
  • CSP2024 前集训:多校A层冲刺NOIP2024模拟赛06
    前言写晚了,忙着打abc和scp了。scpT1送,T2T3T4防AK。T1小Z的手套二分答案,双指针进行转移,若差值在\(mid\)范围内则转移,\(O(n\log(v))\)。点击查看代码#include<bits/stdc++.h>#definelllonglong#defineendl'\n'#definesortstable_sortusingnamespace......
  • DAY7 继承&多态
    继承 目的提高代码的重用性,减少一些重复代码的书写权限修饰符就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。private只能本类缺省本类、同一个包中的类protected本类,同一个包中的类、子孙类中public任意位置特点单继承:Java是单继承模......
  • 正睿csp-s 7连测 day6
    day6A.ThoughtfulDreams难度:红输出\(1\simn\)即可。#include<bits/stdc++.h>#definelllonglong#definemxn200010usingnamespacestd;lln;intmain(){cin>>n;for(inti=1;i<=n;i++)cout<<i<<'';......
  • Day6 备战CCF-CSP练习
    Day6题目描述给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。输入格式输入的第一行包含一个字符串\(S\),由大......
  • 10.12牛客CSP-S考试总结
    10.12牛客CSP-S考试总结T1大部分时间在想这题,考场上想到了如何判断不合法的情况,并对剩余情况进行分段,然后根据改变的位置在段中的位置来判断是否可以以当前这个为第一个删的。T2最后时间打了一个暴力,但是写的不够优秀,正解应该是对于二进制数按位考虑异或来进行维护。然后就对......
  • 洛谷P8818 [CSP-S 2022] 策略游戏
    Problem给出两个数组A,B,进行q次询问,每次分别给出这两个数组的某个区间l1,r1,l2,r2,也就是\(A_{l1\simr1}\)与\(B_{l2\simr2}\),有两位同学小L和小Q分别从A,B的以上区间中选一个数,而两数乘积为此次操作的分数,小L希望分数大,小Q希望分数小,请问他们每次以最优策略进行游戏,分数将会......
  • CSP-S 2024 前总结与反思
    做题过于依赖题解与讨论区,缺少行之有效的方法。积累较少,trick大多都不会。现状是思维题对于偏思维难度的想不出正解,偏分讨难度的不会实现;码力题是确实还少点劲头,规划、逻辑较为混乱,没有使用草稿纸的习惯。想把去年的大模拟补了。模拟赛忽高忽低。原因在于策略以及码力问题......
  • CSP 模拟 45
    A好数(number)开桶记录。BSOS字符串(sos)\(f_{i,j,k,n}\)表示到\(i\),结尾两个字母是\(j,k\),已经有了\(0/1/2\)个SOS,字母有\(4\)类,分别为O,没用过的S,无用字母X,用过的S,的方案数,转移暴力。C集训营的气球(balloon)首先有暴力背包,然后每次修改看成删除一个,添加一个,就成退......
  • CSP 模拟 46
    A二分答案,每个数去找范围内最左边的。B相同的数不会交换,所以设\(f_{i,j,k,u}\)为到\(i\),有了\(j\)个0,\(k\)个1,当前位置是\(u\)的最小代价,转移是暴力的,如果一个数要去前面,那么最优的方案一定不会把他往后面换,所以两次移动只有一次贡献,最终的答案要除以\(2\)。C首先......