• 题解 P2983 购买巧克力


    **eg:其实这题就是一个简单的贪心,没有什么难度,只要会一点结构体,就会做了。
    这题要用有限的钱,买到尽量多的巧克力,但巧克力是有限的,每种巧克力只会有一定的奶牛喜欢,我用ans来存储最多的奶牛数,然后根据价格从高到低排序,然后逐个判断就行了。
    这题除了 # n以外的变量,都要开long long类型 **

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 10000
    long long x,y;
    long long n,b;
    vector < pair < long long, long long > > a;
    //vector和数组差不多,只不过他不定长,在不确定数据大小的情况下,vector可能可以节省很多空间
    //pair和结构体差不多,只不过他不用写变量名、定义类型名等等,在只有两个量的情况下推荐写pair
    long long ans;
    #define C getchar()
    
    inline void read(long long &s){
        s=0; int t=1,k=C;
        for (;k<'0'||k>'9';k=C) if (k=='-') t=-1;//判断该数正负 
        for (;k>='0'&&k<='9';k=C) s=(s<<1)+(s<<3)+(k^48);//<<1加上<<3就相当于*10,但是位运算的速度较快,^48也相当于-‘0’,同理,较快。 
        s*=t;
    }
    #define G(a) putchar(a+48)
    inline void write(int s){
        if (s<0) G(-3),s=-s;
        if (s>9) write(s/10);
        G(s%10);
    }
    int main(){
    	read(n);
    	read(b);
    	for(int i=1;i<=n;i++){
    		read(x);
    		read(y);
    		a.push_back({x, y});
    		}
    	sort(a.begin(), a.end());
    	 //在a数组中插入一个元素在末尾,{x, y}表示一个pair型的量,第一个元素是x,第二个是y
        for(long long i = 0; i < n; i++) {
        //vector数组第一个数下标为0
      if(b / a[i].first < a[i].second) {
            //如果这种巧克力不能满足所有奶牛
                ans += b / a[i].first;
                //那么满足能满足的奶牛,满足完毕后肯定不能再满足其它奶牛了
                break;
                //跳出循环
            }
            //如果可以满足所有奶牛,那么全部满足
            ans += a[i].second;
            b -= a[i].first * a[i].second;
            //这里的.first .second表示调用这个结构体中第一个元素、第二个元素
        }
        write(ans);
        return 0;
    }	 
    
    

    p2983

  • 相关阅读:
    Git引用
    如何查看Git对象
    Git是如何存储对象的
    图形化的Git
    git中找回丢失的对象
    Git的Patch功能
    ES查看配置和查看全部配置
    增删改查
    Elasticsearch增、删、改、查操作深入详解
    ES博客链接
  • 原文地址:https://www.cnblogs.com/floatingcloak/p/10337379.html
Copyright © 2020-2023  润新知