2014广州站 A - Dogs' Candies(暴力)

本文解析了一道ACM竞赛中的经典问题——糖果问题。该问题涉及如何通过使用C++和标准模板库中的list来有效地处理大量糖果的增删及美味度计算。文章详细介绍了如何实现快速查找最大美味度的操作。

题目地址

题目大意:一个狗国家的狗国王有一个装糖的盒子,每颗糖有两个属性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;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值