L1-088 静静的推荐 - java

题目解析

给定n组名单 求出满足条件的人数

解题思路

题目条件为:

  • 天梯赛分数不低于 175 分的学生
  • 一共接受 K 批次的推荐名单

  • PAT 分数达到了该企业的面试分数线直接录用

简单来说
PAT分数达到了该企业的面试分数线 直接录用
PAT分数未达到该企业的面试分数线 且 天梯赛分数不低于 175 分的学生 录用K人


可以有两种写法

统计这个分数段剩下还可以录用多少人 和 统计这个分数段有多少人与K取一个min值

代码

1

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		int n = sc.nextInt(), k = sc.nextInt(), s = sc.nextInt();

//		存储该分段剩下可招的人数
		TreeMap<Integer, Integer> res = new TreeMap<Integer, Integer>();

//		招的人数
		int ans = 0;
		while (n-- > 0)
		{
			int a = sc.nextInt(), b = sc.nextInt();

//			如果天梯赛分数 小于 175 就不会考虑
			if (a < 175)
				continue;

//			如果PAT 分数大于等于该企业的 PAT 面试分数线 直接录取
			if (b >= s)
			{
				ans++;
				continue;
			}

//			如果还未招该分段的人就最多招来k人
			if (!res.containsKey(a))
			{
//				剩下的剩下为 k - 1
				res.put(a, k - 1);

//				人数增加
				ans++;
			}
//			不然就是已经招了该分段的人
			else
			{
//				如果当前分段剩下可招的人数 > 0 那么就表示这个分段还可以招人
				if (res.get(a) > 0)
				{
//					该分段可招的剩下人数 - 1
					res.merge(a, -1, Integer::sum);

//					人数增加
					ans++;
				}
			}
		}
		out.println(ans);

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}


2

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		int n = sc.nextInt(), k = sc.nextInt(), s = sc.nextInt();

//		存储该分段未被直接招的人数
		TreeMap<Integer, Integer> res = new TreeMap<Integer, Integer>();

//		招的人数
		int ans = 0;
		while (n-- > 0)
		{
			int a = sc.nextInt(), b = sc.nextInt();

//			如果天梯赛分数 小于 175 就不会考虑
			if (a < 175)
				continue;

//			如果PAT 分数大于等于该企业的 PAT 面试分数线 直接录取
			if (b >= s)
				ans++;
			else
				res.merge(a, 1, Integer::sum);
		}

		for (int i : res.keySet())
			ans += Math.min(res.get(i), k);

		out.println(ans);

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}


TreeMap
TreeMap

merge
merge
merge

treemap.merge(key, value, remappingFunction)
key - 键
value - 值
remappingFunction - 重新映射函数,用于重新计算值返回值

lambda表达式:( 参数 ) - > 表达式

merge我个人觉得和普通的containsKey()查找相同再存进去一样,不过merge更方便点 第三个 里( 可以 ( 那个我也不确定 ,但是这种形式我觉得是lambda表达式) )放lambda表达式( 而 lambda表达式 也觉得是是释放双手的一个东东,它可以将参数里面的数进行表达式运算再传出答案 )求个数


团体程序设计天梯赛-练习集-java

赞赏