guxiaoqing @ 2024-11-10 19:06:22
#include <bits/stdc++.h>
using namespace std;
struct apple{
int gd;
int lq;
}a1[1000000];
apple b1[1000000];
int cmp(apple a,apple b){
if(a.lq<=b.lq){
return 1;
}else{
return 0;
}
}
int main()
{
int n,s,a,b;
cin>>n>>s>>a>>b;
for(int i=1;i<=n;i++){
cin>>a1[i].gd>>a1[i].lq;
}
int l=1;
for(int i=1;i<=n;i++){
if(a+b>=a1[i].gd){
b1[l].gd=a1[i].gd;
b1[l].lq=a1[i].lq;
l++;
}
}
// cout<<endl;
// for(int i=1;i<l;i++){
// cout<<b1[i].gd<<" "<<b1[i].lq<<endl;
// }
sort(b1+1,b1+l,cmp);
// for(int i=1;i<l;i++){
// cout<<b1[i].gd<<" "<<b1[i].lq<<endl;
// }
int i=1,cnt=0;
while(s>=0){
s-=b1[i].lq;
cnt++;
i++;
}
cout<<cnt-1;
return 0;
}
by guxiaoqing @ 2024-11-10 19:12:56
@guxiaoqing 悬赏六坤元
by Estelle_N @ 2024-11-10 19:29:20
@guxiaoqing
#include <bits/stdc++.h>
using namespace std;
struct apple{
int gd;
int lq;
}a1[1000000];
apple b1[1000000];
int cmp(apple a,apple b){
if(a.lq<b.lq){
return 1;
}else{
return 0;
}
}
int main()
{
int n,s,a,b;
cin>>n>>s>>a>>b;
for(int i=1;i<=n;i++){
cin>>a1[i].gd>>a1[i].lq;
}
int l=1;
for(int i=1;i<=n;i++){
if(a+b>=a1[i].gd){
b1[l].gd=a1[i].gd;
b1[l].lq=a1[i].lq;
l++;
}
}
// cout<<endl;
// for(int i=1;i<l;i++){
// cout<<b1[i].gd<<" "<<b1[i].lq<<endl;
// }
sort(b1+1,b1+l,cmp);
// for(int i=1;i<l;i++){
// cout<<b1[i].gd<<" "<<b1[i].lq<<endl;
// }
int i=1,cnt=0;
while(i < l && s>=0){
s-=b1[i].lq;
if(s >= 0)
cnt++;
i++;
}
cout<<cnt;
return 0;
}
by Estelle_N @ 2024-11-10 19:33:48
@Estelle_N
cmp
函数应该为 <
。因为如果写 <=
,当两个变量 lq
相等时,cmp(a, b)
和 cmp(b, a)
都为
最后一个 while
循环应该 i < l
。不然,如果力气足够大,就会一直不停摘苹果。
cnt
的地方,如果按照你之前的写法,比如最后一个苹果刚刚好用完力气,由于还有 i < l
的限制,答案会少计算。
by guxiaoqing @ 2024-11-11 21:25:52
@Estelle_N 谢谢大佬