当前位置: 首页 > news >正文

算法题(148):排座椅

审题:
本题需要我们找到最佳的排座椅方案,并输出行,列方案

思路:
方法一:简单贪心

由于题目会告诉我们有哪几对的同学会交头接耳,所以我们可以记录下第几行/第几列上可以隔开的同学对数,而题目限制我们的行隔离只有k行,列隔离只有l行,所以我们只要求出同学对数最多的前k行与前l列即可。

注意:我们最终输出的是行号/列号,若直接使用普通数组来记录数据会导致最后无法得知原本他们的行号/列号,所以我们使用结构体来进行数据记录

解题:

(1)结构体定义

struct sit
{int index;int count;
}row[N], col[N];

index就是行号/列号,count表示同学对数,row[N]是行结构体数组,col[N]是列结构体数组

(2)数据录入

cin >> m >> n >> k >> l >> d;//初始化结构体for (int i = 1; i <= m; i++) row[i].index = i;for (int i = 1; i <= n; i++) col[i].index = i;//记录数据for (int i = 1; i <= d; i++){int x, y, p, q;cin >> x >> y >> p >> q;if (x == p)//同一行{col[min(y, q)].count++;}else//同一列{row[min(x, p)].count++;}}

我们先对行和列的数组进行索引的初始化,然后将可以隔离的同学对数记录进对应的行/列中。

若x==p,同学在同一行,此时我们需要用列来隔离,所以对min(y,q)的列count++

若y==q,同学在同一列,此时我们需要用行来隔离,所以对min(x,q)的行count++

(3)排序

	bool count_sort(sit& s1,sit& s2)
{return s1.count > s2.count;
}
bool index_sort(sit& s1, sit& s2)
{return s1.index < s2.index;
}//以count进行排序sort(row + 1, row + 1 + m, count_sort);sort(col + 1, col + 1 + n, count_sort);//对前k个多对的根据index进行排序sort(row + 1, row + 1 + k, index_sort);//对前l个多对的根据index进行排序sort(col + 1, col + 1 + l, index_sort);

我们先根据count进行排序,count大的就排前面。

然后由于最后输出的时候要按照行号/列号小的排前面输出,所以我们再对排序后的前k行的行号进行排序,列也是同理。

(4)输出数据

//输出数据for (int i = 1; i <= k; i++){cout << row[i].index << " ";}cout << endl;for (int i = 1; i <= l; i++){cout << col[i].index << " ";}cout << endl;

P1056 [NOIP 2008 普及组] 排座椅 - 洛谷

http://www.xdnf.cn/news/500833.html

相关文章:

  • 实验八 基于Python的数字图像问题处理
  • MySQL 中 JOIN 和子查询的区别与使用场景
  • 基于 Leaflet 地图库的强大线条、多边形、圆形、矩形等绘制插件Leaflet-Geoman
  • [强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程
  • 《算法导论(第4版)》阅读笔记:p82-p82
  • 如何免费在线PDF转换成Excel
  • Java并发编程的挑战:从理论到实战
  • 题单:汉诺塔问题
  • 使用Langfuse和RAGAS,搭建高可靠RAG应用
  • ctfshow——web入门254~258
  • JavaScript入门【2】语法基础
  • webpack 学习
  • 并发学习之synchronized,JVM内存图,线程基础知识
  • 【双指针】缺失的第一个正整数
  • Visual Studio2022跨平台Avalonia开发搭建
  • 混合学习:Bagging与Boosting的深度解析与实践指南
  • 系统架构设计(七):数据流图
  • 售前工作.工作流程和工具
  • 从专家编码到神经网络学习:DTM 的符号操作新范式
  • tp5 关键词搜索商品时进行关键词拆分
  • Slidev集成Chart.js:专业数据可视化演示文稿优化指南
  • 黄点追踪是什么?:揭秘打印机隐形识别机制的技术分析
  • windows编写和调试代码工具——IDE安装
  • QMK 宏(Macros)功能详解(实战部分)
  • muduo库TcpConnection模块详解——C++
  • CMake基础及操作笔记
  • C语言—再学习(结构体)
  • 【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)
  • 玩转 AI · 思考过程可视化
  • 【gitee 初学者矿建仓库】