中级天翼
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;
}
中级启示者
你这写的
核心:
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];