题解:AT_abc348_c [ABC348C] Colorful Beans

· · 题解

题目翻译:

你有 N 个糖果,并且每一个糖果都有美味度 A_i 和他的种类 C_i,求每种糖果中美味度 A_i 的最小值的最大值。换句话说,就是将每种糖果的美味度 A_i 的最小值保存出来,在从中找到最大值并输出。

思路:

看到每种糖果都有两个属性:美味度 A_i 以及种类 C_i,还要找每一种糖果的最小值,便考虑用结构体实现。

具体做法:

先循环输入美味度 A_i 以及种类 C_i,然后排序,最后再按题目描述来找每种糖果中美味度 A_i 的最小值的最大值。输出即可。

代码:

#include<bits/stdc++.h>//万能头文件
using namespace std;
struct d{
    int a,c;
}b[200001];//结构体
int cmp(d x,d y){
    if(x.c==y.c)return x.a<y.a;
    else return x.c<y.c;//优先看种类是否相同,相同就按美味度排序,否则按种类大小排序
}
int n,i,s;
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)cin>>b[i].a>>b[i].c;//输入美味度与种类
    sort(b+1,b+n+1,cmp);//排序
    for(i=1;i<=n;i++)
    {
        if(b[i].c!=b[i-1].c)s=max(s,b[i].a);//判断是否为种类的最小值,以及存其中的最大值
    }
    cout<<s;//输出
    return 0;//完结撒花!!!
}

AC 记录

总结:

这道题目算一道结构体与排序的练习题目,作者在赛时 14 分 55 秒时就 A 了,建议可当结构体的经典习题练手。