问题标题: 酷町堂:2794   买礼品

0
0
已解决
丁博扬
丁博扬
中级天翼
中级天翼

2794   买礼品

经验值:1200 时间限制:1000毫秒

题目描述 Description

某小学有n名小朋友,儿童节到了要给他们带去礼物。调查显示,有Ci个小朋友想要第i种礼品,这种礼物的售价为Pi。现在有B元的预算,他最多可以满足多少小朋友?(B的值可能很大)

输入描述 Input Description

第一行,两个整数,N B
接下来N行,每行两个整数,Pi Ci

输出描述 Output Description

输出能有多少小朋友满意

样例输入 Sample Input

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

样例输出 Sample Output

8

数据范围及提示 Data Size & Hint

所有数据的范围不超过long long
N<=

 

 

WA50分代码:

 #include<iostream>
#include<algorithm>
using namespace std;
long long int cnt;
struct man{
    long long p,c;
}a[100005];
bool cmp(man x,man y){
    return x.p<y.p;

int main(){
    int n,s;
    cin>>n>>s;
    for(int i=1;i<=n;i++){
        cin>>a[i].p>>a[i].c;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        if(s>=(a[i].p*a[i].c)){
            s-=(a[i].p*a[i].c);
            cnt+=a[i].c;
        }
        else{
            cnt+=s/a[i].p;
            break;
        }
    }
    cout<<cnt;
    return 0;
}


0
已采纳
李显晨
李显晨
中级启示者
中级启示者

你这写的

核心:

long long n,b; 
    cin>>n>>b;
    for(long long i=1;i<=n;i++) cin>>a[i].p>>a[i].c;
    sort(a+1,a+1+n,cmp);
    for(long long i=1;i<=n;i++){
        b-=a[i].q();
        if(b>0) sum+=a[i].c;
        else{
            b+=a[i].q();
            sum+=b/a[i].p;
            break;
        }
    }
    cout<<sum;

函数不变,结构体改成这样:

struct lp{
    long long p,c;
    long long q(){
        return p*c;
    }
}a[100005];

 

0
0
王文博
王文博
缔造者之神
缔造者之神

1.n>,不是>=

2.cnt+=s/a[i].p改为cnt+=floor(s*1.0/a[i].p);

0
我要回答