2008NOIP普及组真题 2. 排座椅

线上OJ:

【08NOIP普及组】排座椅

核心思想:

1、假设第 i 行和第 i+1 行之间有 2 组交头接耳的学生对,则 row[i] = 2,表示第i行 和第i+1行有2组;
2、假设第 i 列和第 i+1 列之间有 5 组交头接耳的学生对,则 col[i] = 5,表示第i列 和第i+1列有5组;
3、所以,在读入每一行交头接耳的数据时(共 d 对数据),如果是在同一行,则更新row[i];如果是在同一列,则更新col[i]
4、对row[i]进行降序排序,挑选最大的k个进行输出(输出时按照id的升序进行输出);同理,对col[i]进行降序排序,挑选最大的L个进行输出(输出时按照id的升序进行输出)

题解代码:
#include <bits/stdc++.h>
#define id second
#define cnt first
using namespace std;

const int N = 1005;

typedef pair<int, int> PII;
PII row[N], col[N];
int m, n, k, l, d;
int x, y, p, o;
int prt[N];

bool cmp(PII a, PII b)
{
    return a.cnt > b.cnt;  // 按照该行(该列)交头接耳的数量进行排序(从大到小)
}

int main()
{
    scanf("%d %d %d %d %d", &m, &n, &k, &l, &d);
    for(int i = 1; i <= m; i++) row[i].id = i;
    for(int i = 1; i <= n; i++) col[i].id = i;

    for(int i = 1; i <= d; i++)
    {
        scanf("%d %d %d %d", &x, &y, &p, &o);
        if(x == p)  y > o ? col[o].cnt++: col[y].cnt++;  // 如果第3列和第2列有交头接耳,则第2列的cnt++
        else if(y == o)  x > p ? row[p].cnt++: row[x].cnt++; // 如果第3行和第2行有交头接耳,则第2行的cnt++
    }

    sort(row + 1, row + 1 + m, cmp); // 对行的cnt进行降序排序
    sort(col + 1, col + 1 + n, cmp); // 对列的cnt进行降序排序

    for(int i = 1; i <= k; i++)  prt[i] = row[i].id;  // 把行cnt最大的k个id挑出来
    sort(prt + 1, prt + 1 + k);  // 对这k个id进行升序排序(输出要求)
    for(int i = 1; i <= k; i++)  printf("%d ", prt[i]);
    printf("\n");

    for(int i = 1; i <= l; i++)  prt[i] = col[i].id;  // 把列cnt最大的l个id挑出来
    sort(prt + 1, prt + 1 + l);  // 对这 L 个id进行升序排序(输出要求)
    for(int i = 1; i <= l; i++)  printf("%d ", prt[i]);

    return 0;
}

相关推荐

  1. 2008NOIP普及 2. 座椅

    2024-05-13 21:58:16       37 阅读
  2. 2009NOIP普及 3. 细胞分裂

    2024-05-13 21:58:16       29 阅读
  3. 2003NOIP普及 4. 麦森数

    2024-05-13 21:58:16       33 阅读
  4. 2002NOIP普及 1. 级数求和

    2024-05-13 21:58:16       31 阅读
  5. 2001NOIP普及 4. 装箱问题

    2024-05-13 21:58:16       34 阅读
  6. 2017NOIP普及 2. 图书管理员

    2024-05-13 21:58:16       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 21:58:16       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 21:58:16       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 21:58:16       87 阅读
  4. Python语言-面向对象

    2024-05-13 21:58:16       96 阅读

热门阅读

  1. kalman-filter python实现?

    2024-05-13 21:58:16       36 阅读
  2. 哈希表第9/9题--四数之和

    2024-05-13 21:58:16       39 阅读
  3. Swiper轮播图

    2024-05-13 21:58:16       39 阅读
  4. Windows C++ 弹框显示图片或者播放视频

    2024-05-13 21:58:16       25 阅读
  5. OpenCV特征匹配总结

    2024-05-13 21:58:16       39 阅读
  6. 信息系统架构_3.信息系统架构的一般原理

    2024-05-13 21:58:16       31 阅读
  7. vue3速览

    2024-05-13 21:58:16       34 阅读
  8. 完美实现vue3异步加载组件

    2024-05-13 21:58:16       39 阅读
  9. ts 详细-学习

    2024-05-13 21:58:16       32 阅读