题目传送门
题目大意
题目描述
有 N N N 种豆子,第 i i i 中豆子的美味度是 a i a_i ai,颜色是 c i c_i ci 豆子是混合的,只能通过颜色来区分。
每一种颜色都有一个美味度最小的豆子,你需要求出这里面最大的美味度。
样例 1 1 1 解释:
这里有两个颜色是 1 1 1 的豆子,美味度是 100 100 100、 40 40 40,最小美味度为 40 40 40。
还有两个颜色是 5 5 5,美味度是 20 20 20、 30 30 30,最小美味度为 20 20 20。
最后取 max ( 20 , 40 ) = 40 \max(20 , 40) = 40 max(20,40)=40,所以答案为 40 40 40。
数据范围
- 1 ⩽ N ⩽ 2 × 1 0 5 1 \leqslant N \leqslant 2 \times 10^5 1⩽N⩽2×105。
- 1 ⩽ A i ⩽ 1 0 9 1 \leqslant A_i \leqslant 10^9 1⩽Ai⩽109。
- 1 ⩽ C i ⩽ 1 0 9 1 \leqslant C_i\leqslant 10^9 1⩽Ci⩽109。
- 输入数据全部都是整数。
解题思路
对于每种颜色的豆子,我们先找到美味度最小的那个,最后找出这些不同种类的豆子中美味度最大的即可。
那我们怎么找到第 i i i 种豆子中美味度最小的那个呢?这里给出两种思路:
- 使用桶的思想标记。
- 对于每一种的豆子按照美味度从大到小排序。
注意: 如果你使用的是思路一,那么你不能使用数组进行标记,因为数据范围很大,因此我们可以使用 map
进行标记。
第一种思路的代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
int a, c;
}b[200010];
map<int, int> m;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> b[i].a >> b[i].c;
if (m[b[i].c] == 0)
m[b[i].c] = b[i].a;
else
m[b[i].c] = min(m[b[i].c], b[i].a);
}
int ans = -1e9;
for (int i = 1; i <= n ;i ++){
ans = max(m[b[i].c], ans);
}
cout << ans;
return 0;
}
第二种思路的代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
int a, c;
inline bool operator < (const node f) const {
if (c != f.c)
return c < f.c;
return a < f.a;
}
}b[200010];
//bool cmp(node a, node b){
// if (a.c != b.c)
// return a.c < b.c;
// return a.a < b.a;
//}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> b[i].a >> b[i].c;
sort(b + 1, b + 1 + n);
int ans = -1e9;
for (int i = 1; i <= n; i++)
if (b[i].c != b[i - 1].c)
ans = max(ans, b[i].a);
cout << ans;
return 0;
}
总结
这道题目还是很水,主要考察的是桶或者结构体排序,如果需要程序运行速度更快,建议大家使用第二种方法完成这道题目,因为本题使用第二种方法比第一种方法快两倍,如果需要以最快的速度完成这道题,那么建议使用第一种方法,因为代码要短
50
50
50 个字符。总体来说思路比较好想,本人想到的是第一种方法 ,可能是 ,总之 map
用多了导致的吧map
非常实用,建议大家去学习学习。
西格玛矩阵:
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum\sum
∑∑∑∑∑∑∑∑∑∑∑∑∑∑∑
不得不说,看起来感觉还行。