P5594 【XR-4】模拟赛题解

最后更新于 2025-08-02 21:13:28
分类 个人记录

P5594 【XR-4】模拟赛题解

问题分析

题目要求我们计算教练每天需要准备的模拟赛场数。具体来说,我们需要统计在每一天有多少个人在这一天进行他们的第 $j$ 套模拟赛题。每个人必须按顺序打完 $m$ 套模拟赛题,并且这些比赛日期已经提前确定。

解决方案

  1. 读取输入

    • 首先读取整数 $n$,表示参与集训的人数。
    • 读取整数 $m$,表示每名 OIer 需要参加的模拟赛数量。
    • 读取整数 $k$,表示总的天数。
    • 接下来读取 $n$ 行数据,每行包含 $m$ 个整数,表示每个 OIer 在接下来的 $k$ 天中有空的日子。
  2. 记录每个人的考试安排

    • 使用一个二维数组 $a$ 来记录每个人的考试安排。具体来说,$a[i][j] = 1$ 表示第 $i$ 天有第 $j$ 个人在这一天进行他的第 $j$ 套模拟赛题。
    • 初始化一个大小为 $(k+1) \times (m+1)$ 的二维布尔数组 $a$,其中 $a[i][j]$ 表示在第 $i$ 天是否有第 $j$ 个人进行他的第 $j$ 套模拟赛题。
  3. 统计每天需要准备的比赛场数

    • 遍历每一天 $i$(从 1 到 $k$),统计在这天有多少个人进行他们的模拟赛题。
    • 使用一个变量 $ans$ 来记录当前天需要准备的比赛场数。
    • 对于每一天 $i$,遍历所有可能的 $j$(从 1 到 $m$),如果 $a[i][j] = 1$,则将 $ans$ 增加 1。
    • 输出 $ans$ 的值,并将其重置为 0,以便处理下一天的数据。
  4. 输出结果

    • 最后,逐天输出每天需要准备的比赛场数。

代码实现

下面是完整的 C++ 代码实现:

#include<bits/stdc++.h>
using namespace std;
bool a[1005][1005];
int ans;
int main(){
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=0;i<n;i++){
        for(int j=1;j<=m;j++){
            int x;
            cin>>x;
            a[x][j]=1;
        }
    }
    for(int i=1;i<=k;i++){
    	ans=0;
        for(int j=1;j<=m;j++){
            if(a[i][j]){
               ans++; 
            }
        }
        cout<<ans<<" ";
    }
    return 0;
}