描述

上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行的第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。

输入

输入的第一行,有5个用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。

接下来D行,每行有4个用空格隔开的整数。第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。

输入数据保证最优方案的唯一性。

输出

输出文件共两行。

第一行包含K个整数,a1 a2 ……ak,表示a1行和a1+1行之间、a2行和a2+1行之间、…、第ak行和第ak+1行之间要开辟通道,其中ai<ai+1,每两个整数之间用空格隔开(行尾没有空格)。

第二行包含L个整数,b1 b2……bl,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第bl列和bl+1列之间要开辟通道,其中bi<bi+1,每两个整数之间用空格隔开(行尾没有空格)。

样例输入

4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4

样例输出

2
2 4

题意

如上

题解

贪心,考虑过每条线有几组交头接耳,然后每次选取最大的,最后排序从小到大输出

代码

 #include<stdio.h>
#include<algorithm>
using namespace std; int main(){
int i,j,x,y,x1,y1,m,n,K,L,D,k[]={},l[]={};
scanf("%d%d%d%d%d",&m,&n,&K,&L,&D); for(i=;i<D;i++){
scanf("%d%d%d%d",&x,&y,&x1,&y1);
if(x==x1)
l[min(y,y1)]++;
if(y==y1)
k[min(x,x1)]++;
} int a[],b[];
int ka=,kb=;//a和b的总个数
int maxx,pos;//pos代表位置
for(i=;i<K;i++){
maxx=;
for(j=;j<=m;j++)
if(k[j]>maxx)
maxx=k[j],pos=j;
k[pos]=;
a[ka++]=pos;
}
for(i=;i<L;i++){
maxx=;
for(j=;j<=n;j++)
if(l[j]>maxx)
maxx=l[j],pos=j;
l[pos]=;
b[kb++]=pos;
} sort(a,a+ka);
sort(b,b+kb);
for(i=;i<ka;i++){
if(i==)printf("%d",a[i]);
else printf(" %d",a[i]);
}
puts("");
for(i=;i<kb;i++){
if(i==)printf("%d",b[i]);
else printf(" %d",b[i]);
}
puts("");
return ;
}

TZOJ 4855 排座椅(贪心)的更多相关文章

  1. 普及组2008NOIP 排座椅(贪心+排序)

    排座椅 时间限制: 1 Sec  内存限制: 50 MB提交: 4  解决: 3[提交][状态][讨论版][命题人:外部导入] 题目描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任 ...

  2. 【洛谷】题解 P1056 【排座椅】

    题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...

  3. 洛谷 P1056 排座椅 题解

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

  4. NC16618 [NOIP2008]排座椅

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

  5. noip200802排座椅

    排座椅 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的 ...

  6. 排座椅(seat)

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

  7. soj1762.排座椅

    1762. 排座椅 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 上课的时候总有一些同学和前后左右的人交头接耳,这是令 ...

  8. 洛谷 P1056 排座椅

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

  9. 洛谷P1056 排座椅

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

随机推荐

  1. 除了用作缓存数据,Redis还可以做这些

    Redis应该说是目前最受欢迎的NoSQL数据库之一了.Redis通常被作为缓存组件,用作缓存数据.不过,除了可以缓存数据,其实Redis可以做的事还有很多.下面列举几例,供大家参考. 1.最新列表 ...

  2. apache 服务器在ubuntu上图片无法显示解决

    很简单的一段代码实例: <!DOCTYPE html> <html> <body> <h2>Welcome here!</h2> <i ...

  3. [UE4]射击和直线追踪

    只有有朝向的组件(如character.Controller等)才能动态获取到朝向,在编辑视图中会有一个箭头表示正前方: 如果是没有朝向的组件(如摄像机),则获取到的朝向永远是固定的

  4. unity开发android游戏

    环境搭建: Unity+JDK+Android Studio+Android SDK(+NDK) 教程:unity开发android游戏(一)搭建Unity安卓开发环境 注意“Build System ...

  5. ubuntu 命令汇总

    1.linux添加全局变量 //查看当前的全局变量 echo $PATH //打开bashrc 文件,在最后面添加需要 加入的目录路径 vi ~/.bashrc //例如: export PATH=$ ...

  6. 线程池,queue模块增加用法

    1 同一个进程内的队列(多线程) import queue queue.Queue() 先进先出 queue.LifoQueue() 后进先出 queue.PriorityQueue() 优先级队列 ...

  7. [Mysql]查看版本号的五种方式

    [Mysql]查看版本号的五种方式   目录(?)[+]   查看版本信息 #1 使用命令行模式进入mysql会看到最开始的提示符 Your MySQL connection id is 3Serve ...

  8. Js 动态设置DIV日期信息

    HTML代码如下: <div  id="time"> 2013年12月20日 14:49:02 星期五 </div> JS代码如下: window.onlo ...

  9. Zookeeper 介绍翻译

    源网址链接 https://zookeeper.apache.org/ Apache Zookeeper 开放源码的服务器,提供高可靠的分布式协调服务. Zookeeper是一个维护配置信息,命名服务 ...

  10. 折腾了几个小时,分享下zendstudio10的git使用

    今天打开zend10,发现新建项目的地方有 from git,from github,就试了试,发现可以导出,也可以commit,但是没办法push. 就百度百度,发现zendstudio10的git ...