题目如下:
刚刚看到这道题的时候一点点思路都没有……连题目都没读懂……
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef struct clas
{
int id;
int num;
}clas;
bool cmp(clas a,clas b)
{
if(a.num == b.num)
return a.id < b.id;
else
return a.num < b.num;
}
clas arr[10005];
int main()
{
memset(arr,0,sizeof(arr));
int N,M,a,b;
scanf("%d %d",&N,&M);
for(int i = 1;i <= M;i++)
arr[i].id = i;
for(int j = 0;j < N;j++)
{
scanf("%d",&a);
for(int k = 1;k <= a;k++)
{
scanf("%d",&b);
arr[b].num += 1;
}
}
sort(arr + 1,arr + M +1,cmp);
for(int i = 1;i < M + 1;i++)
{
printf("%d %d\n",arr[i].id,arr[i].num);
}
return 0;
}
cmp 一切为了比较,题中提到了‘相同人数的,课程编号小的先输出’的要求,所以用人数比较。
注意输入问题!!!就是没读懂题……
然后就是正常的结构体排序问题嗯!