• 抢课啦!(排序)


    链接:https://ac.nowcoder.com/acm/contest/321/B
    来源:牛客网
     

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    没有选上课的孩子,或者还有?”“救救孩子……”

    __________________________

    又又又到了选修课抢课的时间了!集训队成员全心备战亚洲区域赛,居然忘记了选课.

    缓过神来的集训队成员现在很想知道,每门课人数从小到大的排序结果是什么.

    Wty主席这时微微一笑,早已看穿了一切.

    他早就实时爬取了每一个学生所选的课程列表,现在只需要简单的统计就行了!

    你能帮帮他们吗?

    输入描述:

    第一行两个正整数N,M,其中N<=104,M<=104,课程从1-M编号,
    
    接下来N行,
    
    每行一开始为一个非负整数K,表示该学生选课数量,接下来一行内有K个不同的正整数ai表示每个
    
    学生所选的课程编号,其中0<=K<=10 ,1<=ai<=M

    输出描述:

    M行,每行两个数字,分别代表课程编号与课程人数,
    相同人数的,课程编号小的先输出

    示例1

    输入

    复制

    3 3
    1 1
    3 1 2 3
    2 2 3

    输出

    复制

    1 2
    2 2
    3 2

    说明

    所有课程的人数都一样,于是按照课程编号输出

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    
    using  namespace std;
    
    struct node
    {
    	
    	int num,sum;
    }p[100005];
    int a[10005];
    bool cmp(node x,node y)
    {
    	if(x.sum!=y.sum)
    	{
    		return x.sum<y.sum;
    	}
    	else
    	{
    		return x.num<y.num;
    	}
    }
    int main()
    {
        int N,M;
        
        int K;
        cin>>N>>M;
        for(int t=0;t<N;t++)
        {
         	scanf("%d",&K);
         	for(int j=0;j<K;j++)
         	{
         		int s;
         		scanf("%d",&s);
         	    a[s]++;	
    		}
    	}
    	for(int t=1;t<=M;t++)
    	{
    		p[t].num=t;
    		p[t].sum=a[t];
    	}
    	sort(p+1,p+M+1,cmp);
    	
    	for(int t=1;t<=M;t++)
    	{
    		cout<<p[t].num<<" "<<p[t].sum<<endl;
    	}
    	
        
    	return 0;
    }
  • 相关阅读:
    用户体验
    dwz中权限控制与跳转(转)
    synchronized详解
    CodeIgniter笔记
    linux,apache,php,mysql常用的查看版本信息的方法
    dwz中展开左侧菜单的指定列表
    Apache与Nginx的优缺点比较(转)
    如何在Oracle中复制表结构和表数据 【转载】
    apache配置虚拟主机
    Disallowed Key Characters(转)
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781873.html
Copyright © 2020-2023  润新知