题目描述

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

同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。

于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了2个会交头接耳的同学,那么他们就不会交头接耳了。

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

输入样例                输出样例

4 5 1 2 3                 2
4 2 4 3                  2 4
2 3 3 3
2 5 2 4 样例最优解图析:

题目分析:
  
既然是模拟题,先看情景需求,再看样例,一看到“最好的”、“最优解” ,不禁感叹,又是一道贪心,再通过对样例图的分析可以知道,每一行每一列都有一个价值,根据每一行的价值从大到小,进行优先切分,
然后再根据列的价值对列进行切分。贪心算法中价值决定数据处理的优先级
实现思路:
  
题目的意思很明确想让我们用有限的横、纵线将最多的交头接耳的学生分开,题目说一定相邻,那么交头接耳的人要么y相等,要么x相等,由于,线有横纵两种,所以下,x、y分别考虑。那么如何得到每一列x,y的价值呢
我最开始的想法是结构体记录下两个数的位置,但后来一像既然是相邻的那么只需要记录一个坐标的x或y即可,所以我选择了用数组直接存储。当x相等的时候存储下y的频数,在x不等的时候存下x的频数。完成记录后,对x,y的频数
进行桶排序,再将排序结果的索引存到新的数组,这时权重的排序就完毕了,然后只要新数组不为0的数从 0 到 k或l就是需要切割的行列。
题解:
  
#include <stdio.h>
#include <stdlib.h> int min(int a, int b); int main()
{
int m = , n = , k = , l = , d = ;
int x[] = {}, y[] = {};
int col[] = {}, row[] = {}; scanf("%d%d%d%d%d", &m, &n, &k, &l, &d); for (int i = ; i <= d; i++)
{
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if (x1 != x2) //判断x是否相等
{ //不等时一定存在y有相同
//取最小加一最大减一
y[min(x1, x2)]++; //价值
}
else
{ //等于
x[min(y1, y2)]++;
}
} for (int i = ; i <= k; i++)
{
//对y进行价值排序 int max = -;
int index = ; for (int j = ; j < m; j++)
{
if (y[j] > max)
{
max = y[j];
index = j;
}
}
y[index] = ;
col[index]++;
} for (int i = ; i <= l; i++)
{//对y进行价值排序
int max = -;
int index = ; for (int j = ; j < n; j++)
{
if (x[j] > max)
{
max = x[j];
index = j;
}
}
x[index] = ;
row[index]++;
} for (int i = ; i < ; i++)
{
if (col[i])//遍历x
{
printf("%d ", i);
}
}
printf("\n"); for (int i = ; i< ;i++)
{
if (row[i])
{
printf("%d ", i);
} } return ;
} int min(int a, int b)
{
return a < b ? a : b;
}


  
 

洛谷训练场——简单模拟 排座位(P1056)的更多相关文章

  1. 洛谷试炼场-简单数学问题-P1088 火星人

    洛谷试炼场-简单数学问题 A--P1088 火星人 Description 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...

  2. 洛谷试炼场-简单数学问题-P1403 [AHOI2005]-因数

    洛谷试炼场-简单数学问题 P1403 [AHOI2005]约数研究 Description 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机"Samuel I ...

  3. 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂

    洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...

  4. 洛谷 P4148 简单题 KD-Tree 模板题

    Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...

  5. 洛谷 P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I(分块+卡常)

    洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这 ...

  6. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  7. AC日记——潜伏者 洛谷 P1071 (模拟)

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...

  8. 洛谷 P4148 简单题 解题报告

    P4148 简单题 题意 维护单点加与矩形求和,强制在线 说明 \(n\le 500000,m\le 200000\),\(4000ms / 20MB\) kd-tree 复杂度我不懂 是一颗平衡树, ...

  9. 【刷题】洛谷 P3768 简单的数学题

    题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...

随机推荐

  1. 用Java打开一个网页

    BareBonesBrowserLaunch.java 从网上无意间看到的一个工具类,意思是打开一个URL,在不同的操作系统都通用. 1.使用 很简单: String url = "http ...

  2. java swing简介

    java应用程序用户界面开发包 Swing是一个用于开发Java应用程序用户界面的开发工具包.它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格.Swing开发人员只用很少 ...

  3. ImageMagick 将PDF转图片命令

    将 pdf 转一张图片 PS C:\Users\Microestc\desktop> magick convert -density -quality .pdf -append .jpeg ro ...

  4. Redis第一篇章 Hello Word!

    1.找到redis目录 2.在新建一个文件夹(myredis) 3.将redis.conf 进行复制到myredis 文件夹里面 4.启动redis redis-server /home/dc2-us ...

  5. keyup事件、keydown事件和input事件的区别

    keydown.keyup 属于键盘事件,input 属于文本事件 详细说明: keydown:当用户按下键盘上的任意按键时触发,如果按住不放,会重复触发此事件. keyup:当用户释放键盘上的按键时 ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:将页面元素所包含的文本内容替换为背景图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 2020 NUC 19级第一次训练赛

    感染(low) Description n户人家住在一条直线上,从左往右依次编号为1,2,...,n.起初,有m户人家感染了COVID-19,而接下来的每天感染的人家都会感染他家左右两家的人,问t天后 ...

  8. java第二次课件课后动手动脑习题整理总结(2019年9月23号)

    一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...

  9. 新闻网大数据实时分析可视化系统项目——15、基于IDEA环境下的Spark2.X程序开发

    1.Windows开发环境配置与安装 下载IDEA并安装,可以百度一下免费文档. 2.IDEA Maven工程创建与配置 1)配置maven 2)新建Project项目 3)选择maven骨架 4)创 ...

  10. 时间转换(scanf的指定格式读入)

    给定一个12小时制的时间,请将其转换成24小时制的时间.说明:12小时制的午夜12:00:00AM,对应的24小时制时间为00:00:00.12小时制的中午12:00:00PM,对应的24小时制时间为 ...