题目地址:https://www.luogu.com.cn/problem/P1056

题解原地址:https://createsj.blog.luogu.org/solution-p1056

由于题目是要求最多能隔开多少对会交头接耳的同学,我们可以用贪心轻松求解(幸好走廊的行数列数都是固定的),只需要得到隔开交头接耳的同学最多的 k 条横向的通道和 l 条纵向的通道就可以了!掌声响起来~

过程大概是这个样子:

  1. 定义两个数组 a 和 b,分别储存行和列的通道可隔开的交头接耳的同学的对数;

  2. 将 a 和 b 按可所隔开的同学的对数从大到小排序

  3. 输出 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 【排座椅】的更多相关文章

  1. 洛谷 P1056 排座椅 题解

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 \(D\ ...

  2. 洛谷 P1056 排座椅

    P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上 ...

  3. 洛谷P1056 排座椅

    洛谷P1056 排座椅 洛谷传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有 ...

  4. 洛谷 P1056 排座椅 桶排序

    桶排序大法好! 每次一看到这种范围小的题,本萌新就想用桶排. 因为题目中的m,n都小于1000,我们就可以定义两个1000的数组,表示每一行或每一列可以隔开几对讲话的童鞋. 然后再定义两个1000的数 ...

  5. 洛谷 P1056 排座椅【贪心/结构体排序】

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...

  6. 洛谷——P1056 排座椅

    https://www.luogu.org/problem/show?pid=1056#sub 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主 ...

  7. 洛谷P1056——排座椅(模拟,贪心,排序)

    https://www.luogu.org/problem/show?pid=1056 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发 ...

  8. P1056 排座椅

    非原创 #include<bits/stdc++.h>using namespace std;int t1[2009];int t2[2009]; int findmax(int *a){ ...

  9. luogu P1056 排座椅

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...

  10. java实现 洛谷 P1056 排座椅

    import java.util.Arrays; import java.util.Map.Entry; import java.util.Scanner; import java.util.Tree ...

随机推荐

  1. javascript原生ajax请求

    class Ajax{ constructor(url, method, data, callback_suc, callback_err, callback_run){ this.RT = true ...

  2. pytorch --Rnn语言模型(LSTM,BiLSTM) -- 《Recurrent neural network based language model》

    论文通过实现RNN来完成了文本分类. 论文地址:88888888 模型结构图: 原理自行参考论文,code and comment: # -*- coding: utf-8 -*- # @time : ...

  3. 一次压力测试Bug排查-epoll使用避坑指南

    Bug复现 使用Webbench对服务器进行压力测试,创建1000个客户端,并发访问服务器10s,正常情况下有接近8万个HTTP请求访问服务器. 结果显示仅有7个请求被成功处理,0个请求处理失败,服务 ...

  4. c++ bool

    bool 就两个值,真或者假,通常用来存储关系表达式或者逻辑表达式的结果. 以前是用 int 来表示真假,大 int 有多个值,所以才规定 0 为假,非零为真,导致对应关系比较麻烦,有了 bool 就 ...

  5. 【WPF学习】第四十九章 基本动画

    在前一章已经学习过WPF动画的第一条规则——每个动画依赖于一个依赖项属性.然而,还有另一个限制.为了实现属性的动态化(换句话说,使用基于时间的方式改变属性的值),需要有支持相应数据类型的动画类.例如, ...

  6. 12.python内置模块之sys模块介绍

    python的sys模块是与python解释器交互的一个接口,提供对解释器使用或维护的一些变量的访问,即与解释器强烈交互的函数. sys模块的常用函数: 1.sys.argv:命令行参数列表.第一个元 ...

  7. Git操作:一次性强制push所有分支

    现在手上有两个分支,master和rotation,想一次性推送所有分支,可以用--all参数来实现: git push --all origin 如果远程仓库有更改,但你需要直接推送,那就可以使用强 ...

  8. ArcGIS Runtime SDK for Android中SimpleFillSymbol.Style样式

    SimpleFillSymbol.Style样式枚举共8种: 1.BACKWARD_DIAGONAL 反对角线填充 2.CROSS 交叉线填充 3.DIAGONAL_CROSS 前后对角线填充 4.F ...

  9. 剑指offer-面试题32-分行从上到下打印二叉树-二叉树遍历

    /* 题目: 分行按层自上向下打印二叉树. */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空. 添加两个计数器,current记录当前行的节点数,next记 ...

  10. javascript 基础整理

    js编码标准 参考 数据类型 注意事项