题目描述
X 校正在进行 CSP 前的校内集训。
一共有 n名 OIer 参与这次集训,教练为他们精心准备了 m 套模拟赛题。
然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 k 天中都恰好有 m 天有空打模拟赛。
为了方便管理,教练规定一个人必须按顺序打完 m 套模拟赛题。
比如,小 X 在接下来的第 2,3,5天有空打模拟赛,那么他就必须在第 2 天打第 1 套模拟赛题,第 3天打第 2 套模拟赛题,第 5 天打第 3 套模拟赛题。
教练需要为每一个人的每一次模拟赛做准备,为了减小工作量,如果在某一天有多个人打同一套模拟赛题,那么教练只需要在这一天准备一场使用这一套题的模拟赛即可。
你作为机房大佬,教练想请你帮他计算一下,他每天需要准备多少场模拟赛。
输入格式
第一行三个整数 n,m,k。
接下来 n 行,每行 m 个整数,第 i 行第 j 列的整数表示第 i 个人在接下来的 k天中第 j个有空。
输出格式
一行 k 个整数,第 i 个整数表示接下来的第 i 天教练需要准备的模拟赛场数。
题目分析:
每个人的日程安排除了要记录下哪一天有空以外,还需要记录是第几天有空(也就是第几套卷子)所以我想到可以用一个三维数组来储存这n个人的k天的数据。但是实操之后便舍弃了这个方法,不可行,于是我想了另外一个方法,就是统计教练第1,2,3,···,m套卷子在哪些天需要准备,然后再计算每一天需要准备几套卷子就可以了。
答案如下:
#include<stdio.h>
#define max 1000
int main()
{
int n, m, k,i,j,day,count,plan[max][max]={0};
scanf("%d %d %d", &n, &m, &k);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{
scanf("%d", &day);
plan[j][day-1] = 1;
}
for (i = 0; i < k; i++)
{
for(j=0,count=0;j<m;j++)
{
if(plan[j][i])
count++;
}
printf("%d ",count);
}
return 0;
}