题目地址: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;
}

最新文章

  1. OpenMP对于嵌套循环应该添加多少个parallel for 分类: OpenMP C/C++ Linux 2015-04-27 14:48 53人阅读 评论(0) 收藏
  2. crond: unrecognized service 无crond解决办法
  3. Requirements Gathering
  4. FRM-10001, FRM-10002, FRM-10003 Oracle Form Builder Error Solution
  5. FPGA笔记-读取.dat文件
  6. Welcome to Linux From Scratch!
  7. mysql 查询多个id
  8. 【转】 如何利用Cocos2d-x开发一个游戏
  9. JavaScript多线程初步学习
  10. JavaScript--基本包装类型+Math对象
  11. BLOB存储图片文件二进制数据是非对错
  12. mysql 初始化
  13. tmux配置
  14. UVA - 1371 Period 二分+dp
  15. I/HwPointEventFilter: do not support AFT because of no config
  16. iOS证书配置与管理
  17. 部署springboot工程到linux上及遇到的坑
  18. hyperledger中文文档学习-4-构建第一个fabric网络
  19. leetcode 206. Reverse Linked List(剑指offer16)、
  20. 更换title上的ico

热门文章

  1. 将win10激活为专业工作站版并且永久激活(图文详细教程)
  2. ELK(V7)部署与架构分析
  3. pt-query-digest 慢日志监控
  4. SAXParseException Content is not allowed in Prolog (前言中不允许有内容)
  5. php面试笔记(7)-php基础知识-文件及目录处理考点
  6. leetcode—js—Add Two Numbers
  7. Spark存储介绍
  8. Android中ProgressBar的使用-通过Handler与Message实现进度条显示
  9. Lua实现的八皇后问题
  10. cmake 指定编译特定可执行文件