MT3038 植发

2024-05-15 20:52
文章标签 植发 mt3038

本文主要是介绍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;
}

这篇关于MT3038 植发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992898

相关文章

植发机构挥泪告别“新中产红利”的黄金时代

当世界百强IT公司IBM裁员的消息甚嚣尘上时,市场的情绪像极了“植发第一股”股价走势。 事实上,IBM将中国系统实验室的研发工作转移,优化国内上千员工,不过是IT行业大减员的一个缩影。近年来,下决心优化调整的不止微软、惠普、戴尔等外企,阿里巴巴、字节跳动、京东、快手、百度、小红书等一众国内大厂也纷纷进行了裁员活动。 图源:微博话题 论一个程序员的“中年危机”,早已成为社会话题。因为失

雍禾植发聚焦医学和美学,雍禾医疗“好医生·一人一案”引领时代

从“秃头大叔”到“秃头少女”,从病理性脱发治疗到美学性毛发诊疗,Z世代下更精细的毛发医疗需求为整个行业带来了重要增量。更多发友意识到毛发的生长和外观对于形象塑造的重要性,并开始寄望通过毛发诊疗来进一步提升个人形象,这一趋势在年轻人中尤为明显。个性化的毛发治疗需求正驱动毛发诊疗行业整体升级转型,而作为行业领军品牌的雍禾医疗则率先通过“好医生·一人一案”实现了毛发医疗从功能性向美学性的升级。

雍禾植发为地球种下发际线,雍禾医疗以公益名义为消费者种下希望

“绿水青山才是金山银山”,绿色现已成为新时代中国的鲜明底色。天更蓝,水更清,人与环境和谐发展已深入人心。位于内蒙古自治区阿拉善盟西部的额济纳旗常年干旱少雨,风沙肆虐,这里亟需被植上一片森林,为地球“生发”。 为此,雍禾植发与新华网及中国绿化基金会共同携手,发起了“毛发森林·地球生发计划”。据了解,“毛发森林·地球生发计划”将陆续在西部严重沙化地区植下十万棵梭梭树改善荒漠化地区环境。

雍禾植发袁宣心中有“术”,雍禾医疗帮用户重启人生

从公立医院烧伤外科来到雍禾,可以说是袁宣职业生涯里最重要的一个决定。据了解,袁宣医生所在的雍禾植发,是国内最大的毛发医疗机构。截至2022年12月31日,雍禾医疗已组建1341人的专业医疗团队,其中毛发医生294人,护士近959人,另有专业人员(包含药剂师、检验师)88人。据《2022都市人群毛发健康消费白皮书》、《2023中国毛发健康生活方式蓝皮书》两份权威数据报告显示,雍禾在品牌知晓率与接

雍禾医疗以患者为中心 雍禾植发医生文志清专注做精每一台手术

随着生活方式的改变,晚睡、长期使用电子产品等原因让脱发成为消费者不可忽视的问题。有相关数据显示,76%消费者关注自己的头皮健康状况,53%的人群受到脱发困扰,已经有20%消费者认识到专业毛发医疗机构的重要性,选择到专业机构进行治疗或养护。 在行业中,雍禾医疗作为中国领先的专门从事毛发医疗服务的医疗集团,提供诊疗、植发、养固等一站式毛发医疗服务,旗下拥有由专业植发品牌“雍禾植发”、医疗养固品牌

水果也能护发,新生植发的夏日养发之道

夏天是很适合吃水果的季节,那吃什么水果对头发好呢?头发干枯毛躁、出油、头发长得慢,这些问题,吃什么水果能有助于解决呢?下面杭州新生植发给你解答   苹果 抑制头屑   “每天一个苹果,医生远离我”。其实每天吃一个苹果,对头发也是一种保护,苹果含有对皮肤和头发有益的大量营养元素,苹果酸可以防止皮肤和头发的干燥,维生素C可以美白皮肤,果胶则能够保持皮肤和秀发的水分,另外苹果中的营养成分还能够抑制头皮屑

新生植发联手平安保险 全方位保障植发安全

随着植发市场的不断扩张,国内植发人数持续攀升,植发安全成为消费者关注的重心。为保障植发安全,植发行业领军者新生植发联手平安保险,在下个月开启第九届平安植发活动,为每一位前往新生植发的发友提供保险产品。 植发机构与保险公司强强合作 2012年9月,新生植发与平安保险公司开始了首次合作,为发友提供医疗保险。 新生植发拥有国内一流的植发技术,把医疗安全放在第一位。数据显示,自从2012年与平安