题解 P1056 【排座椅】
题目地址:https://www.luogu.com.cn/problem/P1056
题解原地址:https://createsj.blog.luogu.org/solution-p1056
由于题目是要求最多能隔开多少对会交头接耳的同学,我们可以用贪心轻松求解(幸好走廊的行数列数都是固定的),只需要得到隔开交头接耳的同学最多的 k 条横向的通道和 l 条纵向的通道就可以了!掌声响起来~
过程大概是这个样子:
定义两个数组 a 和 b,分别储存行和列的通道可隔开的交头接耳的同学的对数;
将 a 和 b 按可所隔开的同学的对数从大到小排序
输出 a 的前 k 个元素所代表的通道的位置和 b 的前 l 个元素所代表的通道的位置。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MIN(A,B) ((A<B)?A:B)//求两个数中的最小值
using namespace std;
struct st//定义一个结构体,储存在第 l 行/列和第 r 行/列之间插入走廊后能隔开 v 对同学
{
int v,l,r;
}*a/*行*/,*b/*列*/;
inline bool cmp1(const st x,const st y)
{
return x.v>y.v;
}
inline bool cmp2(const st x,const st y)
{
return x.l<y.l;
}
int main()
{
int m,n,k,l,d;
scanf("%d %d %d %d %d",&m,&n,&k,&l,&d);
//为 a,b 动态分配内存,也可之间用 a[1001],b[1001],不过本人只是想省省内存
a=new st[m+1];
b=new st[n+1];
//初始化
memset(a,0,sizeof(st)*n);//数组 a 清零
memset(b,0,sizeof(st)*n);//数组 b 清零
//初始化 l 和 r
for(int i=1;i<m;i++)
a[i].l=i,a[i].r=i+1;
for(int i=1;i<n;i++)
b[i].l=i,b[i].r=i+1;
//输入和处理输入数据
for(int i=0,x,y,p,q;i<d;i++)
{
scanf("%d %d %d %d",&x,&y,&p,&q);
if(x!=p)//如果 x!=p,说明两名同学不在同一行,所以就在同一列
a[MIN(x,p)].v++;
else//否则,说明两名同学在同一行
b[MIN(y,q)].v++;
}
sort(a,a+m,cmp1);//以 v 来为数组 a 从小到大排序
sort(a,a+k,cmp2);//以插入顺序来为数组 a 的前 k 个元素排序
sort(b,b+n,cmp1);//以 v 来为数组 b 从小到大排序
sort(b,b+l,cmp2);//以插入顺序来为数组 b 的前 l 个元素排序
//输出
for(int i=0;i<k;i++)
printf("%d ",a[i].l);
putchar('\n');
for(int i=0;i<l;i++)
printf("%d ",b[i].l);
//清空动态分配的内存
delete [] a;
delete [] b;
return 0;
}
题解 P1056 【排座椅】的更多相关文章
- 洛谷 P1056 排座椅 题解
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 \(D\ ...
- 洛谷 P1056 排座椅
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...
- 洛谷P1056 排座椅
洛谷P1056 排座椅 洛谷传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有 ...
- 洛谷 P1056 排座椅 桶排序
桶排序大法好! 每次一看到这种范围小的题,本萌新就想用桶排. 因为题目中的m,n都小于1000,我们就可以定义两个1000的数组,表示每一行或每一列可以隔开几对讲话的童鞋. 然后再定义两个1000的数 ...
- 洛谷 P1056 排座椅【贪心/结构体排序】
题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...
- 洛谷——P1056 排座椅
https://www.luogu.org/problem/show?pid=1056#sub 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主 ...
- 洛谷P1056——排座椅(模拟,贪心,排序)
https://www.luogu.org/problem/show?pid=1056 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发 ...
- P1056 排座椅
非原创 #include<bits/stdc++.h>using namespace std;int t1[2009];int t2[2009]; int findmax(int *a){ ...
- luogu P1056 排座椅
题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...
- java实现 洛谷 P1056 排座椅
import java.util.Arrays; import java.util.Map.Entry; import java.util.Scanner; import java.util.Tree ...
随机推荐
- Java中类锁和对象锁
类锁 类锁 锁的其实是类的Class对象,类锁的代码写法是对类方法加synchronize,或者 synchronize(xx.class){} 对象锁 对象锁 锁的是类的实例对象,对象锁的形式有 对 ...
- Language Model
在某次会上的语言模型的ppt.
- 修改 ssh 远程连接 时间
linux使用的是 红帽旗下 centos. 解释两个文件 /etc/ssh/sshd_config 配置ssh服务器端的 ...
- 一次压力测试Bug排查-epoll使用避坑指南
Bug复现 使用Webbench对服务器进行压力测试,创建1000个客户端,并发访问服务器10s,正常情况下有接近8万个HTTP请求访问服务器. 结果显示仅有7个请求被成功处理,0个请求处理失败,服务 ...
- 杭电------2097 Sky数(C语言写)
//这个题没有一次过,哈哈哈哈,题意理解错了,开始还以为是必须加起来等于22呢 //其实就是依次算出个进制下的和,虽然每个循环最多循环四次,但是还是加上必要的判断,想办法让 //提前结束 #inclu ...
- MySQL常用语法总结
一,学习mysql的前戏 1:基础入门命令 show databases: #查看当前MySQL中的所有数据库 create 数据库名: #创建新的数据库 use 数据库名: #使用该数据库 show ...
- Cobalt Strike Bypassing Windows Defender 使用混淆处理
Cobalt Strike – Bypassing Windows Defender 混淆处理 对于所有红色团队成员来说,在交付有效的替代品同时又不拖延延展组织的所有风吹草动始终是一个挑战.就像所有其 ...
- KVM管理工具webvirtmgr的使用
WebVirtMgr的日常配置:添加宿主机,创建虚拟机,磁盘扩容,快照等具体操作记录如下: 一.创建虚拟机 1.创建存储池 点击创建的宿主机,进入虚拟机部署界面 点击“存储池”按钮,创建存储池(即创建 ...
- GNU make doc - 函数总结
$(value variable) 使用variable未展开状态的值 FOO = $(PATH) all: $(warning $(FOO)) $(warning $(value FOO)) #ou ...
- K8S集群入门:运行一个应用程序究竟需要多少集群?
如果你使用Kubernetes作为应用程序的操作平台,那么你应该会遇到一些有关使用集群的方式的基本问题: 你应该有多少集群? 它们应该多大? 它们应该包含什么? 本文将深入讨论这些问题,并分析你所拥有 ...