AT_abc348_c [ABC348C] Colorful Beans 题解

题目传送门

题目大意:

给定 \(n\) 个豆子,每个豆子有美味度 \(a_i\) 和颜色 \(c_i\),选择 \(1\) 种颜色的豆子吃 \(1\) 粒美味度最小的豆子,求所吃豆子美味度的最大值。

数据范围:\(1 \leq n \leq 2 \times 10^5,1 \leq a_i,c_i \leq 10^9\)

题目分析:

对于求同种颜色豆子美味度的最小值,考虑开一个 mapunordered_map 等存储,记录所出现的颜色,再遍历每种颜色豆子美味度求最大值即可。

时间复杂度:\(O(n)\),含有较大常数。

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,c[N],ans;
unordered_map <int,int> mp;//习惯打unordered_map减少一下常数
signed main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int a;
		scanf("%d%d",&a,&c[i]);
		if(!mp[c[i]]) mp[c[i]]=a;//这里map初始为空,所以直赋值
		else mp[c[i]]=min(mp[c[i]],a);//否则取最小值
	}
	for(int i=1;i<=n;i++)
		ans=max(ans,mp[c[i]]);//遍历每种颜色的豆子的美味度
	printf("%d",ans);
	return 0;
}
posted @ 2024-10-21 11:25  lunjiahao  阅读(2)  评论(0编辑  收藏  举报