Masha与老鼠

题目链接:链接: NK—14847.
题目描述:
链接:https://ac.nowcoder.com/acm/problem/14847
来源:牛客网

有一天Masha回到家,发现有n只老鼠在它公寓的走廊上,她大声呼叫,所以老鼠们都跑进了走廊的洞中。
这个走廊可以用一个数轴来表示,上面有n只老鼠和m个老鼠洞。第i只老鼠有一个坐标𝑥𝑖,第𝑗个洞有一个坐标𝑝𝑗和容量𝑐𝑗。容量表示最多能容纳的老鼠数量。
找到让老鼠们全部都进洞的方式,使得所有老鼠运动距离总和最小。老鼠i进入洞j的运动距离为|𝑥𝑖 − 𝑝𝑗|
无解输出-1。

Input:
第一行包含两个整数n,m,表示老鼠和洞的数量。
第二行包含n个整数𝑥1…𝑛,表示老鼠坐标。
接下来m行每行两个整数𝑝, 𝑐,表示每个洞的坐标和容量。
𝑛, 𝑚 ≤ 106, 1 ≤ 𝑐 ≤ 𝑛, 1 ≤ |𝑝|, |𝑥| ≤ 10^9

Output:
输出最小运动距离总和或-1。

思路:将每个老鼠的位置和洞的位置存储在同一结构体中,按坐标的大小排序。遍历所有坐标,若当前坐标为洞的坐标,判断当前洞能否继续容纳老鼠,如果可以容纳老鼠且之前遍历过程中的老鼠未进洞,将老鼠进洞。若当前坐标为老鼠坐标,判断之前遍历过程中是否有多余的洞,若有,让老鼠进洞,否则将老鼠入队。其中距离的计算很巧妙,因为坐标有正有负,所以取极远处为起始点进行距离计算。

#include<bits/stdc++.h>
#include<iostream>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
typedef unsigned long long ull;
typedef  long long ll;
typedef pair<ll,ll> pi;
#define IOS std::ios::sync_with_stdio(false)
#define ls p<<1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值