题目如下:
刚刚看到这道题的时候一点点思路都没有……连题目都没读懂……
#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 一切为了比较,题中提到了‘相同人数的,课程编号小的先输出’的要求,所以用人数比较。
注意输入问题!!!就是没读懂题……
然后就是正常的结构体排序问题嗯!