3,5测试点错了,谁来帮帮蒟蒻QWQ

P1478 陶陶摘苹果(升级版)

wcop114514 @ 2023-07-13 11:06:11

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,s,a,b,x[300],y[300],mi,ans=0;
    cin>>n>>s>>a>>b;
    for(int i=0;i<n;i++)cin>>x[i]>>y[i]; 
    for(int i=0;i<n;i++){
        mi=i;
        for(int j=i;j<n;j++){
            if(y[mi]>y[j])mi=j;
        }
        int q=y[mi],w=x[mi];
        y[mi]=y[i];x[mi]=x[i];
        y[i]=q;x[i]=w;
    }
    for(int i=0;i<n;i++){
        if(x[i]>a+b||s<y[i])s-=0;
        else {
        s-=y[i];
        ans++;
        }
    }
    cout<<ans;
    return 0;
}

by lanjiaxin404 @ 2023-07-13 11:23:07

#include<iostream>
using namespace std;
int c[101];//定义一百个桶子,c[i]代表用i个力气能摘到的苹果的数目
int main(){
    int n,s,h,a,b,i,t=0; 
    cin>>n>>s>>h>>i;h+=i;//输入,借用"i"将淘淘用凳子达到的最大高度复制给"h"
    for(i=1;i<=n;i++){
        cin>>a>>b;
        if(a<=h)c[b]++;//如果能摘到,就在用b个力气能摘到苹果的桶子中加一
    }
    //接下来 按力气从小到大选苹果
    for(i=0;i<=100&&s>=0;i++){//注意要从"0"开始,有苹果是免费的
        while(c[i]){//一个桶子里也可有多个苹果
            s-=i;//减去摘这个苹果的力气
            t++;//摘到的苹果数加一 
            c[i]--;//桶里的苹果减一个 
            if(s<0){//当力气没了时结束 
                t--;//这个苹果没有足够力气摘不了(s<0) 
                break;
            }
        }
    }
    cout<<t;//输出。 
    return 0;
}

题解


by iBaeJuhyun @ 2023-07-13 11:38:52

数组开小了,至少到3000以上; 排序用sort就好,并且要特判把所有能摘的都摘掉的情况; 代码是这样的

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,s,a,b,y[5005],mi,ans=0,cnt=0;
    cin>>n>>s>>a>>b;
    int h=a+b;
    for(int i=0,x,t;i<n;i++) {
        cin>>x>>t; 
        if(x<=h) y[++cnt]=t;
    }
    sort(y+1,y+1+cnt);
    while(s>=y[++ans]) {
        s-=y[ans];
        if(ans>cnt) {
            cout<<cnt;
            return 0;
        }
    }
    cout<<ans-1;
    return 0;
}

by wcop114514 @ 2023-07-14 11:58:24

@HanSohee @lanjiaxin404 谢谢两位大佬


|