#P0999. [NOIP2008普及组] 排座椅

这篇具有很好参考价值的文章主要介绍了#P0999. [NOIP2008普及组] 排座椅。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

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

同学们在教室中坐成了 MM 行 NN 列,坐在第 ii 行第 jj 列的同学的位置是 (i,j)(i,j),为了方便同学们进出,在教室中设置了 KK 条横向的通道,LL 条纵向的通道。

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

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

输入格式

第一行,有 55 个用空格隔开的整数,分别是 M,N,K,L,D(2 \le N,M \le 1000,0 \le K<M,0 \le L<N,D \le 2000)M,N,K,L,D(2≤N,M≤1000,0≤K<M,0≤L<N,D≤2000)。

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

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

输出格式

共两行。 第一行包含 KK 个整数 a_1,a_2,\ldots,a_Ka1​,a2​,…,aK​,表示第 a_1a1​ 行和 a_1+1a1​+1 行之间、第 a_2a2​ 行和 a_2+1a2​+1 行之间、…、第 a_KaK​ 行和第 a_K+1aK​+1 行之间要开辟通道,其中 a_i< a_{i+1}ai​<ai+1​,每两个整数之间用空格隔开(行尾没有空格)。

第二行包含 LL 个整数 b_1,b_2,\ldots,b_Lb1​,b2​,…,bL​,表示第 b_1b1​ 列和 b_1+1b1​+1 列之间、第 b_2b2​ 列和 b_2+1b2​+1 列之间、…、第 b_LbL​ 列和第 b_L+1bL​+1 列之间要开辟通道,其中b_i< b_{i+1}bi​<bi+1​,每两个整数之间用空格隔开(列尾没有空格)。

输入数据 1

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

Copy

输出数据 1

2
2 4

Copy

提示

#P0999. [NOIP2008普及组] 排座椅,算法,c++,开发语言

上图中用符号*、※、+标出了 33 对会交头接耳的学生的位置,图中 33 条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。

NOIP 2008 普及组 第二题

代码:

#include <stdio.h>
#include <stdlib.h>

int min(int a, int b);

int main()
{
    int m = 0, n = 0, k = 0, l = 0, d = 0;
    int x[1010] = {0}, y[1010] = {0};
    int col[1010] = {0}, row[1010] = {0};

    scanf("%d%d%d%d%d", &m, &n, &k, &l, &d);

    for (int i = 1; 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 = 1; i <= k; i++)
    {
//对y进行价值排序

        int max = -1;
        int index = 0;

        for (int j = 1; j < m; j++)
        {
            if (y[j] > max)
            {
                max = y[j];
                index = j;
            }
        }
        y[index] = 0;
        col[index]++;
    }

    for (int i = 1; i <= l; i++)
    {//对y进行价值排序
        int max = -1;
        int index = 0;

        for (int j = 1; j < n; j++)
        {
            if (x[j] > max)
            {
                max = x[j];
                index = j;
            }
        }
        x[index] = 0;
        row[index]++;
    }

    for (int i = 0; i < 1010; i++)
    {
        if (col[i])//遍历x
        {
            printf("%d ", i);
        }
    }
    printf("\n");
    
    for (int i = 0; i< 1010;i++)
    {
        if (row[i])
        {
            printf("%d ", i);
        }
        
    }

    return 0; 
}

int min(int a, int b)
{
    return a < b ? a : b;
}

 文章来源地址https://www.toymoban.com/news/detail-618805.html

到了这里,关于#P0999. [NOIP2008普及组] 排座椅的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [NOIP2004 普及组] FBI 树 队列解法

    我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。 FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I 结点三种。由一个长度为 $2^N$ 的 01 串 S 可以构造出一棵 FBI 树 T,递归的构造方法如下: 1. T 的根

    2024年02月07日
    浏览(90)
  • P1077 [NOIP2012 普及组] 摆花 题解

    小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m m m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n n n 种花,从 1 1 1 到 n n n 标号。为了在门口展出更多种花,规定第 i i i 种花不能超过 a i a_i a i ​ 盆,摆花时同一种花放在一起,且不同种类的花

    2024年02月08日
    浏览(45)
  • 搜索?——P3956 [NOIP2017 普及组] 棋盘

    传送门: [NOIP2017 普及组] 棋盘 - 洛谷 思路: 将棋盘的每一个格子看做一个点,建一个无向图用来跑最短路. 这道题本应用搜索来做,但是转换成最短路好像简单点 建图: 1.对于已经有颜色的格子,在扫描四个方向的格子对相同颜色的建条长度为0的边,不同颜色的建条长度为1的

    2024年02月01日
    浏览(35)
  • #P1003. [NOIP2009普及组] 道路游戏

    小新正在玩一个简单的电脑游戏。 游戏中有一条环形马路,马路上有 nn 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这 nn 个机器人工厂编号为 1sim n1∼n,因为马路是环形的,所以第 nn 个机器人工厂和

    2024年02月15日
    浏览(35)
  • [NOIP2009 普及组] 分数线划定#洛谷

    世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150 % 150% 150% 划定,即如果计划录取 m m m 名志愿者,则面试分数线为排名第 m ×

    2024年01月17日
    浏览(38)
  • NOIP2013普及组复赛T4:车站分级

    题目链接:洛谷P1983 [NOIP2013 普及组] 车站分级 一条单向的铁路线上,依次有编号为 1 , 2 , … , n 1, 2, …, n 1 , 2 , …

    2024年02月08日
    浏览(34)
  • P1093 [NOIP2007 普及组] 奖学金

    某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金。期末,每个学生都有 3 3 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么

    2024年02月10日
    浏览(37)
  • P1046 [NOIP2005 普及组] 陶陶摘苹果

    陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 1010 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 3030 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 1010 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到

    2023年04月27日
    浏览(32)
  • P1030 [NOIP2001 普及组] 求先序排列

    给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8≤8)。 共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。 共一行一个字符串,表示一棵二叉树的先序。 输入 #1 复制 输出 #1 复制

    2023年04月22日
    浏览(40)
  • #P0998. [NOIP2007普及组] 守望者的逃离

    恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。 守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。 为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。 守望者的跑步

    2024年02月14日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包