问题标题: 酷町堂:2605 牛奶收购

0
0
已解决
万韧山
万韧山
初级天翼
初级天翼
#include<bits/stdc++.h>
using namespace std;
int t,n;
struct node{
    int p,a;
    int zh(){
        return p*a;
    }
}a[2000005];
bool cmp(node x,node y){
    return x.zh()<y.zh();
}
int main(){
//取个位 %10
//取十位 /10%10
//取百位 /100%10
//取千位 /1000%10
//2^31次方没有超long long
    //freopen("题目英文名.in","r",stdin);
    //freopen("题目英文名.out","w",stdout);
    cin>>t>>n;
    long long ans=t*n;
    for(int i=1;i<=n;i++){
        cin>>a[i].p>>a[i].a;
    }
    long long sum=0;
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        if(ans>=a[i].zh()){
            sum+=a[i].zh();
            ans-=a[i].zh();
        }else{
            sum+=t/a[i].p;
            break;
        }
    }
    cout<<sum;
    /*
    #include<bits/stdc++.h>
    using namespace std;
    int t,n;
    struct node{
        int p,a;
        int zh(){
            return p*a;
        }
    }a[2000005];
    bool cmp(node x,node y){
        return x.p<y.p;
    }
    int main(){
        cin>>t>>n;
        long long ans=t*n;
        for(int i=1;i<=n;i++){
            cin>>a[i].p>>a[i].a;
        }
        long long sum=0;
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;i++){
            if(ans>=a[i].zh()){
                sum+=a[i].zh();
                ans-=a[i].a;
            }else{
                sum+=ans/a[i].p;
                break;
            }
        }
        cout<<sum;
        return 0;
    }

    */
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

样例不对

贪心真难写


0
已采纳
宋子墨
宋子墨
新手天翼
新手天翼

这题其实很水

我的结构体里没有你的zh函数,但定义了p和a

cmp函数里我写的是:比较单价啊p的大小,小的在前

定义s和j, s=0, j=0

然后输入t和n

我没有用你的ans

循环输入a[i].p和a[i].a

排序

用while循环,循环条件是t!=0

循环内部{

j累加1

如果a[j].a比t小    s+=a[j].a*a[j].p       t-=a[j].a

否则      s+=n*a[j].p        t=0;

}

输出s

求采纳

0
0
李泽屿
李泽屿
新手启示者
新手启示者

不是,你这排序都不对呀!!!

应该按照单价从小到大排序呀!!!

0
我要回答