冰淇淋题解
2026-03-25 16:29:38
发布于:浙江
14阅读
0回复
0点赞
学生版:
#include<bits/stdc++.h>
using namespace std;
struct no {
int f,s;
};
no a[300005];
bool cmp(no x,no y)
{
if(x.s==y.s) return x.f<y.f;
return x.s>y.s;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i].f>>a[i].s;
}
sort(a+1,a+1+n,cmp);
int ans=0;
if(a[1].f!=a[2].f) {
ans=a[1].s+a[2].s;
}
else
{
int ans1,ans2;
ans1=a[1].s+a[2].s/2;
int pos=1;
while(a[pos].f==a[1].f) pos++;
ans2=a[1].s+a[pos].s;
ans=max(ans1,ans2);
}
cout<<ans;
return 0;
}
老师版:
#include<bits/stdc++.h>
using namespace std;
struct no {
int f,s;
};
no a[300005];
bool cmp(no x,no y)
{
if(x.s==y.s) return x.f<y.f;
return x.s>y.s;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i].f>>a[i].s;
}
//按照s排序
sort(a+1,a+1+n,cmp);
//做选择
int ans=0;
//不同
if(a[1].f!=a[2].f) {
ans=a[1].s+a[2].s;
}
else //口味相同
{
int ans1,ans2;
ans1=a[1].s+a[2].s/2;//选择相同口味
//找到第一个与最大s口味不同的冰激凌
int pos=1;
while(a[pos].f==a[1].f) pos++;
ans2=a[1].s+a[pos].s;//选择不同口味
ans=max(ans1,ans2);
}
cout<<ans;
return 0;
}
全部评论 2
mjunbterwe
3天前 来自 浙江
0666666
3天前 来自 浙江
0












有帮助,赞一个