zoukankan      html  css  js  c++  java
  • [haoi2013]花卉节

    题目描述:

    ZZ市准备在绿博园举办一次花卉节。Dr.Kong接受到一个任务,要买一批花卉进行布置园林。
    能投入买花卉的资金只有B元 (1 <= B <= 10^18) 。Dr.Kong决定做一个社会调查,统计一下市民们都喜欢哪种花卉,以便在有限的资金范围内,让更多的市民都能找到并标注一盆自己喜欢的花卉(一盆花只能一位市民标注)。
    经调查统计,市场上有N (1 <= N<=100,000)种不同类型的花卉,第i种花卉的价格是Pi(1 <= Pi <= 10^18) 。有Ci (1 <= Ci <= 10^18) 个市民喜欢。
    你能帮助Dr.Kong计算一下,在不透支的情况下,如何购买花卉才能让更多的市民都能找到并标注一盆自己喜欢的花卉?
    例如:Dr.Kong 有 50块钱,有5种不同类型的花卉:

       花卉类型     价格/盆     喜欢该类型花卉市民的人数    
         1         5           3
         2         1           1
         3         10           4
         4         7           2
         5         60           1

    显然,Dr.Kong不能购买第5种类型的花卉,因为他不够钱。
    下面的购买方案是最优的:
      第1种花卉买3盆;第2种花卉买1盆;第3种花卉买2盆;第4种花卉买2盆。
    总共花费:5*3+1*1+10*2+7*2=50,这样,Dr.Kong 最多能让3+1+2+2 =8 人满意

    输入格式 Input Format

    第1行: N B
    第2..N+1行: Pi Ci (i=1,2,....,N)。

    输出格式 Output Format
    一个整数,最多可以让多少市民满意

    样例输入 Sample Input

    5 50
    5 3
    1 1
    10 4
    7 2
    60 1

    样例输出 SampleOutput

    8


    时间限制 Time Limitation
    1s

    来源 Source
    haoi2013

    思路:

    看到这道ZZ省选题,本来就以为是一个普通的贪心,直接将所有花的价格从小到大排序,然后直接统计多少人就好,但数据并没有那么乐观........(QAQ)

    所以注意的是:在题中所有的变量全部用long long,并且long long 乘以long long 会爆long long 这的注意,还有别忘了变量的初值...MD又被坑了QAQ

    代码:

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    struct QAQ
    {
        long long s;
        long long v;
    }a[101000];
    inline long long read()
    {
        char ch=getchar();
        long long x=0,f=1;
        while(ch>'9'||ch<'0')
        {
            if(ch=='-')
                f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*f;
    }
    bool mycmb(QAQ x,QAQ y)
    {
        return (x.v<y.v);
    }
    int main()
    {
        //freopen("add.in","r",stdin);
        //freopen("add.out","w",stdin);
        long long n,b;
        cin>>n>>b;
        for(int i=1;i<=n;i++)
        {
            a[i].v=read();
            a[i].s=read();
            
        }
        sort(a+1,a+1+n,mycmb);
        long long ans=0;
        long long now=b;
        long long h=b;
        for(int j=1;j<=n;j++)
        {
            //bool flag=false;
            if(a[j].s*a[j].v>=0&&now>=a[j].s*a[j].v)
            {
                now=now-(a[j].s)*(a[j].v);
                ans+=a[j].s;
            }
            else
            {
                long long y=a[j].s;
                while(h>0)
                {
                    h-=a[j].v;
                    if(h<0)
                        break;
                    ans++;
                    y--;
                    if(y<0)
                        break;
                }
                break;
            }
            h=now;
        } 
        cout<<ans<<endl;
        return 0;
    }
    O__O "…
  • 相关阅读:
    使用Xshell为xftp开ssh通道代理
    linux下查找svn的相关目录的命令
    linux服务器A远程连接服务器B的mysql及1045错误
    怎样下载带权限认证的文件?
    Vue项目打包部署总结
    Vue项目打包压缩:让页面更快响应
    axios请求失败自动重发
    可用的后台管理系统
    vue组件间方式总结
    非脚手架创建vue项目,并使用webpack打包
  • 原文地址:https://www.cnblogs.com/lcyhaha/p/6702489.html
Copyright © 2011-2022 走看看