noip200802排座椅

news/2024/7/5 23:57:32
排座椅
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

       上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的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个整数,a1a2……aK,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。
第二行包含L个整数,b1b2……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

  

此题为noip2008普及组第二题

说实话 这题放在普及组第二题确实难了点!

本题大体思路:首先记录下每一行有多少个说话的。可以先考虑横着的,如果只让画一条线,肯定画人最多的那行,如果让画两条,就画人最多 和 次多的两行,这样才能使上课说话的人数最少,达到最优方案,纵向的方法类似。如果在哪里画下了通道,设个标记,最后输出。简称贪心法。

 1 #include<iostream>
 2 using namespace std;
 3 int b[1005],c[1005],m,n,K,L,D,X,Y,x,y,t=0,mm=0,i;
 4 int main()
 5 {
 6     cin>>m>>n>>K>>L>>D;
 7     for(i=0;i<D;i++)
 8     {
 9         cin>>X>>Y>>x>>y;//K x,L,y
10         if(X==x)
11         {
12             if(Y>y) c[y]++;
13             else c[Y]++;
14         }
15         if(Y==y)
16         {
17             if(X>x) b[x]++;
18             else b[X]++;
19         }//记录每行和每列有几个说话的
20     }
21     t=0;
22     while(t<L)
23     {
24         mm=0;
25         for(i=1;i<=n;i++)
26         {
27             if(c[i]>c[mm])
28             {
29                 mm=i;//寻找说话最多的
30             }
31         }
32         t++;
33         c[mm]=-1;//划通道,做标记
34     }
35     t=0;
36     while(t<K)
37     {
38         mm=0;
39         for(i=1;i<=n;i++)
40         {
41             if(b[i]>b[mm])
42             {
43                 mm=i;
44             }
45         }
46         t++;
47         b[mm]=-1;
48     }
49     int f=0;//输出
50     for(i=1;i<=m;i++)
51     {
52         if(b[i]==-1)
53         {
54             if(f) cout<<' '<<i;
55             else {cout<<i;f=1;}
56         }
57     }
58     putchar('\n');
59     f=0;
60     for(i=1;i<=n;i++)
61     {
62         if(c[i]==-1)
63         {
64             if(f) cout<<' '<<i;
65             else {cout<<i;f=1;}
66         }
67     }
68 system("pause"); 69 return 0; 70 }

 

转载于:https://www.cnblogs.com/scx2015noip-as-php/p/noip200802.html


http://www.niftyadmin.cn/n/983076.html

相关文章

Sqoop---数据迁移工具

https://blog.csdn.net/u012453843/article/details/52951120 说明的比较详细&#xff0c;可他参考一下

MySQL 无法满足查询性能?北明天时选择 TDengine 实现热网监控和能源分析

小 T 导读&#xff1a;目前&#xff0c;北明天时已经在热网监控和能耗分析系统上应用了 TDengine&#xff0c;相比于 MySQL&#xff0c;当前在存储和查询上都获得了显著提升。在其他项目中&#xff0c;他们也正在加速 TDengine 对其他数据库产品的替代。本文中北明天时分享了关…

mongoose crud

Js代码 exports.insert function(modelname, data) { var model require(./models/ modelname); model.create(data, function(err, doc) { if (err) return next(err); }); }; //Model.remove function remove (conditions, ca…

快速安装samba

现下载samba http://pan.baidu.com/s/1eRq9lIy 简介&#xff1a;Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件&#xff0c;由服务器及客户端程序构成。SMB&#xff08;Server Messages Block&#xff0c;信息服务块&#xff09;是一种在局域网上共享文件和打印机的一种…

【直播】通过一条 SQL 语句,看透分布式数据库的查询优化

我们先看一下&#xff0c;一条 SQL 语句从客户端发起到服务端执行所经历的过程。图片来源于网络优化器是这个过程中的关键环节&#xff0c;它决定了如何更好地执行一条 SQL 语句。优化器中包含很多优化规则&#xff0c;比如子查询提升、条件优化、无用列裁剪、子链接转换等。各…

新项目:思考(Terminal Think Music)

Are you executing a process that takes a long time? Do you want to know that it’s still working while you are in another terminal/making coffee? Do you have a favorite game show tune to play while doing something? 您正在执行需要很长时间的过程吗&#xf…

“一个扫描枪一张表”,韵达选择 TDengine 应对每日亿级数据量

小 T 导读&#xff1a;此前&#xff0c;韵达使用 MySQL 分区索引处理订单数据的方式遭受到了挑战&#xff0c;面对每日亿级的数据量&#xff0c;MySQL 显然已经无法满足当下的数据处理需求。为更好地发展业务&#xff0c;在此基础上韵达新增了 TDengine 的数据源&#xff0c;用…

MFC单文档应用程序显示图像

1 利用VS2010向导创建一个MFC单文档应用程序MFCTest 2 在MFCTestView.h中引用<atlimage.h>&#xff0c;并创建一个CImage对象 #include <atlimage.h>private:CImage image;3 打开资源文件&#xff0c;选中Menu下面的IDR_MAINFRAME&#xff0c;添加一个新的菜单项“…