MT3038 植发

 思路:

有两个点可以取头发,每个头发寿命不同。

先看点(0,0),按寿命由小到大排序(先考虑寿命短的可以移植到哪里)。

(0,0)点头发放置的位置应该让(0,m)点的头发可以尽可能多的放置(例如(0,0)点有一根头发既可以放置在(1,5)点,又可以放置在(5,1)点,则会放置在(1,5)点)

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e4 + 10;
struct node
{int x, y;int dis;bool operator<(const node &a) const{ // 大根堆,重载<号return dis < a.dis;}
};
int a1[N], a2[N]; // 不同寿命头发有多少根
int n, m, k, l;
bool used[N][N];
vector<pair<int, int>> s1[N], s2[N]; // 存储不同距离下的点的坐标
priority_queue<node> down, up;       // 大根堆 down 和 up
int dist(int x1, int y1, int x2, int y2)
{return abs(x1 - x2) + abs(y1 - y2);
}int main()
{cin >> n >> m;cin >> k;for (int i = 0; i < k; i++){ //(0,0)处头发int x;cin >> x;a1[x]++; // 存寿命为x的头发有多少根}cin >> l;for (int i = 0; i < l; i++){ //(0,m)处头发int x;cin >> x;a2[x]++;}for (int i = 1; i <= n; i++){ // 对于每一个点,都计算离(0,0)和(0,m)的距离for (int j = 1; j <= m; j++){ // s1s2存不同距离下有哪些点s1[dist(i, j, 0, 0)].push_back({i, j});s2[dist(i, j, 0, m + 1)].push_back({i, j});}}int flag = 0;// 先看离(0,0)的距离for (int i = 1; i <= n + m; i++){ // 遍历每一个距离 (i不仅为距离,还为要消耗的寿命)for (int j = 0; j < s1[i].size(); j++){ // 对于指定的距离,把符合的点放到队列里int x = s1[i][j].first;int y = s1[i][j].second;node tmp;tmp.dis = dist(x, y, 0, m + 1), tmp.x = x, tmp.y = y;down.push(tmp);}for (int j = 0; j < a1[i]; j++){ // 对于同一个寿命,可以放的位置if (down.empty()){ //(0,0)的头发已放完flag = 1;break;}// 取出能放的最远的点int tmpx = down.top().x;int tmpy = down.top().y;down.pop();used[tmpx][tmpy] = 1; // 记录该位置已被使用}if (flag == 1){break;}}// 先看离(0,m)的距离for (int i = 1; i <= n + m; i++){ // 遍历每一个距离ifor (int j = 0; j < s1[i].size(); j++){int x = s2[i][j].first;int y = s2[i][j].second;if (used[x][y] == 1){ // 若该位置已经被使用,跳过continue;}node tmp;tmp.dis = dist(x, y, 0, 0), tmp.x = x, tmp.y = y;up.push(tmp);}for (int j = 0; j < a2[i]; j++){if (up.empty()){flag = 1;break;}int tmpx = up.top().x;int tmpy = up.top().y;up.pop();used[tmpx][tmpy] = 1;}if (flag == 1){break;}}if (flag == 0)cout << "YES";elsecout << "NO";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704222.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript-输入输出语句

输出语句 document.write( 输出的内容 ) 语法&#xff1a;document.write( 输出的内容) 作用&#xff1a;内容会显示在网页上 如果输出的内容是标签&#xff0c;也会被解析为网页元素 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&…

六种恢复已删除PDF文件的方法及实用方法全解析

在数字化时代PDF文件已成为我们日常工作中不可或缺的一部分。有时我们可能会因误操作或系统故障而不小心删除Excel、Word或PPT文档&#xff0c;特别是重要的PDF文件。此时如何高效地恢复这些文件就显得尤为重要。今天将为大家介绍六种恢复已删除PDF文件恢复方法&#xff0c;继续…

Day28 代码随想录打卡|栈与队列篇---逆波兰表达式求值

题目&#xff08;leecode T150&#xff09;&#xff1a; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算…

数据结构——二叉树知识点详解!

引言&#xff1a;本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多&#xff0c;希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页&#xff1a;计信猫 目录 一&#xff0…

(论文笔记)TABDDPM:使用扩散模型对表格数据进行建模

了解diffusion model&#xff1a;什么是diffusion model? 它为什么好用&#xff1f; - 知乎 摘要 去噪扩散概率模型目前正成为许多重要数据模式生成建模的主要范式。扩散模型在计算机视觉社区中最为流行&#xff0c;最近也在其他领域引起了一些关注&#xff0c;包括语音、NLP…

首次曝光!我喂了半年主食冻干,喵状态真滴顶~

科学养猫理念的推广&#xff0c;使得主食冻干喂养越来越受到养猫者的欢迎。主食冻干不仅符合猫咪的自然饮食习惯&#xff0c;还能提供丰富的营养&#xff0c;有助于保持猫咪的口腔和消化系统健康。我家喂了半年主食冻干&#xff0c;猫咪的状态是真的不一样了&#xff01; 然而…

knife4j在线文档 测试框架

一、Knife4j介绍&#xff1a; 1.1.介绍&#xff1a; Knife4j是基于SpringBoot构建的一个文档生成工具&#xff0c;它可以让开发者为我们的应用生成在线API文档&#xff1b; 目的是可以更加方便的基于API文档进行测试。 生成的文档还可以导出&#xff0c;然后给到前端开发团队…

Zookeeper and RPC dubbo

javaguide zookeeper面试题 Zookeeper 啥是Zookeeper干啥的 ZooKeeper 可以被用作注册中心、分布式锁&#xff1b; ZooKeeper 是 Hadoop 生态系统的一员&#xff1b; 构建 ZooKeeper 集群的时候&#xff0c;使用的服务器最好是奇数台。 启动ZK 下载安装解压 不过多赘述 我的…

图解堆排序【一眼看穿逻辑思路】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、堆的概念2、实现堆排序前的准备工作3、堆排序的思路3.1 第一步3.2 第二步 4、结语 1、…

C++容器:list(双向链表)

一丶list介绍 C中的list容器底层确实是以双向链表的形式实现的。 list容器是C标准模板库&#xff08;STL&#xff09;中的一部分&#xff0c;它提供了对列表数据结构的实现。 双向链表结构&#xff1a;list容器的每个元素都是通过指针链接在一起的&#xff0c;每个元素都包含…

2024年中国国际厨卫家居展览会(上海KIB厨卫展)

中国国际厨卫家居博览会&#xff08;KIB&#xff09;由中国五金制品协会、中国国际贸易促进委员会轻工行业分会、北京奥维云网大数据科技股份有限公司主办。从最初的“中国国际橱柜、厨房卫浴产品与技术博览会(CIKB&#xff09;”&#xff0c;到2001年与中国国际五金展&#xf…

【2024系统架构设计】回顾历史,查缺补漏篇 ③

前言 hello,大家好: 💡💡💡 我们一起来备考软考高级系统架构设计师吧,本专栏提供综合知识、案例科目、论文(论点和部分示例范文)等内容,包括知识点总结和记忆小妙招哦。 🚀🚀🚀 可以减少资料查找和收集的时间,提高效率,我们一起集中精力学习干货吧! 💡…