为啥第四个点没过,求助

P1478 陶陶摘苹果(升级版)

smby_mobei @ 2024-10-09 13:08:00

只有80分,第四个点RE

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n,s,a,b,x[10000],y[10000],num,m,ans=0;
    cin>>n>>s>>a>>b;
    num=s;
    pair<int,int>  p[10000];
    for(int i=1; i<=n; i++) {
        cin>>x[i]>>y[i];
        p[i]= {y[i],x[i]}; 
    }
    sort(p+1,p+n);
    for(int i=1; i<=n; i++) {
        if(a+b>=p[i].second && num>=p[i].first) {
            ans++;
            num=num-p[i].first;
        }
    }
    cout<<ans;
    return 0;
}

by litangzheng @ 2024-10-09 13:22:00

@smby_mobei 别把很大的数组开成局内变量,包炸的。


by smby_mobei @ 2024-10-09 13:23:03

@litangzheng 还是80分


by smby_mobei @ 2024-10-09 13:23:30

@litangzheng 并且long long肯定能开10000的


by litangzheng @ 2024-10-09 13:25:42

@smby_mobei 那你sort排二元组肯定要自己写个cmp啊。


by smby_mobei @ 2024-10-09 13:26:43

@litangzheng 咋改求助


by dracu @ 2024-10-09 13:28:09

改一下sort就可以了,后面改成p+n+1

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n,s,a,b,x[10000],y[10000],num,m,ans=0;
    cin>>n>>s>>a>>b;
    num=s;
    pair<int,int>  p[10000];
    for(int i=1; i<=n; i++) {
        cin>>x[i]>>y[i];
        p[i]= {y[i],x[i]}; 
    }
    sort(p+1,p+n+1);
    for(int i=1; i<=n; i++) {
        if(a+b>=p[i].second && num>=p[i].first) {
            ans++;
            num=num-p[i].first;
        }
    }
    cout<<ans;
    return 0;
}

帮你试过了AC


by smby_mobei @ 2024-10-09 13:28:38

@dracu 知道了,谢谢指导,可以回关吗


by dracu @ 2024-10-09 13:29:07

@smby_mobei 可以可以,回了


by litangzheng @ 2024-10-09 13:29:20

@smby_mobei 你自己写个cmp啊,不会写就用冒泡,反正O(n^2)能过。


by smby_mobei @ 2024-10-09 13:31:12

@litangzheng sort后面的p+n改成p+n+1就可以了


|