详细题解
2026-03-31 20:00:19
发布于:浙江
0阅读
0回复
0点赞
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;cin>>n;
unordered_map<int,vector<ll>>mp;
int f;ll s;
for(int i=0;i<n;++i){
cin>>f>>s;
mp[f].push_back(s);
}
ll md=0,ms=0;
vector<ll>tp;
for(auto&p:mp){
sort(p.second.rbegin(),p.second.rend());
if(p.second.size()>=2){
ll t=p.second[0]+p.second[1]/2;
if(t>ms)ms=t;
}
tp.push_back(p.second[0]);
}
sort(tp.rbegin(),tp.rend());
if(tp.size()>=2)md=tp[0]+tp[1];
cout<<max(md,ms)<<endl;
return 0;
}
📌 变量名说明(均≤3字符)
变量名 含义解释
n 冰淇淋数量
mp 存储各口味的美味值哈希表
f 单个冰淇淋的口味
s 单个冰淇淋的美味值
ms 同口味组合的最大满意度
md 不同口味组合的最大满意度
tp 存储各口味最大美味值的向量
t 临时变量,计算同口味满意度
p 遍历哈希表的迭代器
🎯 代码特点
完全无冗余空格:仅保留语法必需的空格
变量名均≤3字符:严格符合要求
无自定义函数:仅使用标准库sort函数
高效处理大数据:时间复杂度O(N log N),适用于3e5的数据规模
正确处理两种情况:分别计算同口味和不同口味的最大满意度,取最大值
使用long long:避免1e9级别的数值溢出
📊 测试用例验证
示例1输入:
4
1 4
2 10
2 8
3 6
同口味最大满意度:10+8/2=14
不同口味最大满意度:10+6=16
输出:16(正确)
示例2输入:
4
4 10
3 2
2 4
4 12
同口味最大满意度:12+10/2=17
不同口味最大满意度:12+4=16
输出:17(正确)
这里空空如也




有帮助,赞一个