NowCode--抢课了

题目

链接:https://ac.nowcoder.com/acm/contest/321/B

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


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

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

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

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

你能帮帮他们吗?

输入描述:

第一行两个正整数N,M,其中N<=10^4, M<=10^4,课程从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
题意:有n个同学m个课程,每个人选k个课程,然后输出课程的编号与此课程选的人数。
解题:无力吐槽此出题人,没有说明输出的顺序,只是说课程人选的数量相同时,先输出编号小的课程编号,其他就没有说明了,出题人真是废!!最后才知道输出的顺序是按照课程被选的数量从小到大输出,相同的时候,先输出编号小的!!!
AC–Code
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class QiangKe {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		int[] a = new int[m+1];
		for(int i =0;i<n;i++)
		{
			int a1 = sc.nextInt();
			for(int j =0;j<a1;j++)
			{
				int b = sc.nextInt();
				a[b]++;
			}
		}
		ArrayList<E> list = new ArrayList<E>();
		for(int i=1;i<m+1;i++)
		{
			E e = new E(i, a[i]);
			list.add(e);
		}
		Collections.sort(list);
		for (E e : list) {
			System.out.println(e.bh+" "+e.s);
		}
		sc.close();
	}

}
class E implements Comparable<E>{
	int bh;
	int s;
	public E(int bh,int s) {
		this.bh = bh;
		this.s = s;
	}
	public int compareTo(E o) {
		if(this.s<o.s)
		{
			return -1;
		}
		else if(this.s==o.s)
		{
			if(this.bh>o.bh)
				return 1;
			return -1;
		}
		return 1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值