本文写于2021-3-25
#include<bits/stdc++.h>
using namespace std;
int n,s,a,b,ans;
struct apple{
int x,y;
}app[5005];
bool cmp(apple a,apple b){
return a.x<b.x;
return a.y<a.y;
}
int main()
{
scanf("%d %d",&n,&s);
scanf("%d %d",&a,&b);
if(n==0){
printf("%d",0);
return 0;
}
for(int i=0;i<n;i++)
scanf("%d %d",&app[i].x,&app[i].y);
for (int i = n - 1; i >= 1; --i) {
for (int j = 1; j <= i; ++j) {
if (app[j].y > app[j + 1].y) {
swap(app[j].y, app[j + 1].y);
swap(app[j].x, app[j + 1].x);
}
}
}
for (int i = 1; i <= n; ++i) {
if (app[i].x <= b + a) {
s -= app[i].y;
if (s < 0) {
break;
} else {
ans++;
}
}
}
printf("%d",ans-1);
}
实际上我一开始不是这么写的。
结构体啥的没变
for (int i = n - 1; i >= 1; --i) {
for (int j = 1; j <= i; ++j) {
if (app[j].y > app[j + 1].y) {
swap(app[j].y, app[j + 1].y);
swap(app[j].x, app[j + 1].x);
}
}
}
for (int i = 1; i <= n; ++i) {
if (app[i].x <= b + a) {
s -= app[i].y;
if (s < 0) {
break;
} else {
ans++;
}
}
}
就是这里,排序和算摘到的个数有点问题。
我用的是sort。
可是爆掉了。算个数用的是while
看了看题解,改了下方式就好了,用冒泡+for便AC了?
出题的人好变态啊!弄了个0 0 0 0要求输出0
于是我加了个特判n==0;