蓝桥杯备考:贪心算法之排座位

这道题横着放和竖着放之间是不会产生影响的

我们先说一下算法原理:我们先把所有行能阻止交头接耳的学生数量计算出来,再把每列的计算出来,然后再排一下序,按编号输出最大的几个,但是如果我们用数组存这些数据的话,排完序之后编号就乱了,所以我们选择结构体存储

我们输入的同学的坐标,如果横坐标相同的时候,就说明他们是横着呆着的,我们要在纵列放一个通道,如果纵坐标相同的时候,我们要横着放通道

cpp 复制代码
#include <iostream>
#include <algorithm>
const int N = 1010;
using namespace std;


struct node
{
	int id;
	int cnt;
}col[N], row[N];
int n, m, k, l, d;

bool cmp1(const node& x1, const node& x2)
{
	return x1.cnt > x2.cnt;
}
bool cmp2(const node& x1, const node& x2)
{
	return x1.id < x2.id;
}
int main()
{
	cin >> m >> n >> k >> l >> d;
	for (int i = 1; i <= m; i++) row[i].id = i;
	for (int j = 1; j <= n; j++) col[j].id = j;

	while (d--) {

		int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
		if (x1 == x2) col[min(y1, y2)].cnt++;
		else row[min(x1, x2)].cnt++;
	}
	sort(col + 1, col + n + 1, cmp1);
	sort(row + 1, row + m + 1, cmp1);

	sort(col + 1, col + l + 1, cmp2);
	sort(row + 1, row + k + 1, cmp2);
	for (int i = 1; i <= k; i++)
	{
		cout << row[i].id << " ";
	}
	cout << endl;
	for (int j = 1; j <= l; j++)
	{
		cout << col[j].id << " ";
	}
	cout << endl;


	return 0;
}
相关推荐
qq_459234423 天前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
敲敲了个代码3 天前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展
诚思报告YH3 天前
视频面试软件市场洞察:2026 - 2032年复合年均增长率(CAGR)为10.3%
面试·职场和发展
重生之后端学习3 天前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
tyb3333333 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
Pitiless-invader3 天前
MySQL 相关知识及面试问题汇总
面试·职场和发展
重生之后端学习3 天前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先
逆境不可逃3 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
筱昕~呀3 天前
冲刺蓝桥杯-DFS板块(第二天)
算法·蓝桥杯·深度优先
zheshiyangyang3 天前
前端面试基础知识整理【Day-10】
前端·面试·职场和发展