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