题目大意:一个狗国家的狗国王有一个装糖的盒子,每颗糖有两个属性p,q,分别代表甜度和咸度,每只狗对于甜度和咸度的偏爱度不一样,所以每条狗有两个参数x, y,每颗糖对于特定的狗的美味度等于p*x+q*y。现在有50000个操作,分为三种:z=1,将新的糖(p,q)放入盒子中;z=-1,将盒子中存在的糖(p,q)吃掉;z=0给出一条狗的参数(x,y),询问当前存在的糖的最大美味度
解题思路:题目时间限制是30秒,直接暴力过,因为涉及到删除、插入操作,用list存储
#include<bits/stdc++.h>
using namespace std;
typedef pair<long long, long long> candy;
list<candy> s;
int main()
{
int n;
while(scanf("%d",&n) && n)
{
s.clear();
while(n--)
{
long long x,y,z;
scanf("%I64d%I64d%I64d",&z,&x,&y);
candy aa;
aa.first=x;
aa.second=y;
if(z==1)
s.push_front(aa);
else if(z==-1)
{
for(list<candy>::iterator i=s.begin();i!=s.end();i++)
{
if((*i).first==x&&(*i).second==y)
{
s.erase(i);
break;
}
}
}
else if(z==0)
{
long long sum=-0x7f7f7f7f;
for(list<candy>::iterator i=s.begin();i!=s.end();i++)
{
sum = max(sum, (*i).first*x+(*i).second*y);
}
cout<<sum<<endl;
}
}
}
return 0;
}
本文解析了一道ACM竞赛中的经典问题——糖果问题。该问题涉及如何通过使用C++和标准模板库中的list来有效地处理大量糖果的增删及美味度计算。文章详细介绍了如何实现快速查找最大美味度的操作。
1406

被折叠的 条评论
为什么被折叠?



