洛谷div2【XR-4】模拟赛

本人水平有限,题解不到为处,请多多谅解

本蒟蒻谢谢大家观看

题目:传送门

题目大意:

我们根据样例分析一下:

输入:

6 3 7

2 3 4

2 5 7

3 5 7

1 3 5

5 6 7

1 2 3

输出:

1 2 3 1 3 1 1

样例n,m,k表示有n个人,m套题,k天有空刷题 之后n行,表示第i个人在之后第几天有空刷题

输出最大量不超过m;

我们可以发现1只在第一列出现,所以第一天只需准备1套

2在第一列和第二列均有出现所以第二天需准备2套

3在第一列,第二列,第三列都出现所以第三天需准备3套

……

最后统计k天各在第几列出现即可。


我们可以定义一个bool数组,表示在第j列出现了此数字

我们在统计出现的此数字在多少列数即可

code:

 1 #include<bits/stdc++.h>
 2 #pragma GCC optimize(3)
 3 
 4 using namespace std;
 5 int n,m,k,wz;
 6 int a[1001][1001];
 7 int num[100010],tot;
 8 bool flag[1001][1001];
 9 inline int read(){
10     int x=0,f=1;char ch=getchar();
11     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
12     while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
13     return x*f;
14 }
15 inline void write(int x){
16      char F[200];
17      int tmp=x>0?x:-x ;
18      if(x<0)putchar('-') ;
19      int cnt=0 ;
20         while(tmp>0)
21         {
22             F[cnt++]=tmp%10+'0';
23             tmp/=10;
24         }
25         while(cnt>0)putchar(F[--cnt]) ;
26 }
27 void solve(){
28     for(int i=1;i<=n;i++){
29         for(int j=1;j<=m;j++){
30             flag[a[i][j]][j]=1;
31         }
32     }
33     for(int j=1;j<=k;j++){
34     for(int i=1;i<=k;i++){
35         if(flag[j][i]){
36             num[j]++;
37             //cout<<"flag[j][i]= "<<flag[j][i]<<" j= "<<j<<" i= "<<i<<endl;
38         }
39     }
40 }
41     for(int i=1;i<=k;i++){
42         printf("%d ",num[i]);
43     }
44     return ;
45 }
46 int main()
47 {
48     n=read(),m=read(),k=read();
49     for(int i=1;i<=n;i++){
50         for(int j=1;j<=m;j++){
51             a[i][j]=read();     
52         }
53     }
54     solve(); 
55     return 0;
56 }

 为什们洛谷管理员不给过!!!!!

原文地址:https://www.cnblogs.com/nlyzl/p/11714861.html