自闭了,样例过了,前两个点AC了,第三个第五个WA,第四个RE

P1478 陶陶摘苹果(升级版)

HITACorz @ 2019-10-04 22:14:52

#include<iostream>
#include<algorithm>
using namespace std;
struct tt{
    int xi;//hight
    int yi;//strength
}; 

bool comparisonxi(tt a,tt b){
    return a.xi<b.xi;
}
bool comparisonyi(tt a,tt b){
    return a.yi<b.yi;
}

int main()
{
    const int MAX=5100;
    tt tao[MAX];
    tt nw[MAX];
    int n,a,s,xi,yi,b;
    int i;
    int num=0,temp=0;
    int k;
    cin>>n>>s>>a>>b;
    for(i=1;i<n;i++)
    {
        cin>>tao[i].xi>>tao[i].yi;
    }
    sort(tao+1,tao+n,comparisonxi);
    for(i=1;i<=n;i++)
    {
        if(tao[i].xi<=(a+b))    
        {
            nw[i].xi=tao[i].xi;
            nw[i].yi=tao[i].yi;
            num++;
        }
        else    break;
    }
    sort(nw+1,nw+num+1,comparisonyi);
    k=num;
    for(i=1;i<=num;i++)
    {
        if(b>=0&&k>0)
        {
            b=b-nw[i].yi;
            temp++;
            k--;    
        }
        else    break;
    }   
    cout<<temp;
    return 0;
}

by SadLava @ 2019-10-04 22:52:54

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

struct app{
    int gd;//该苹果的高度
    int lq;//摘苹果的力气 
};
bool cmp(app a,app b){
    return b.lq>a.lq;
}

int main(){
    vector<app> apples;
    int lq;//余剩力气 
    int apple;//苹果数量 
    int yz;//椅子高度 
    int sc;//手长度 
    int ans=0;
    app it;
    scanf("%d%d%d%d",&apple,&lq,&yz,&sc);
    for(int i=0;i<apple;i++){
        scanf("%d",&it.gd);
        scanf("%d",&it.lq);
        if(yz+sc>=it.gd){
            apples.push_back(it);
        }
    }
    sort(apples.begin(),apples.end(),cmp);

    for(int i=0;i<apples.size() && lq-apples[i].lq>=0;i++){
        lq-=apples[i].lq;
        ans++;
    }
    printf("%d",ans);

    return 0;
}

码风不同,只能参考了


by charm1 @ 2019-10-04 22:52:58

@JryACtrying b=b-nw[i].yi; 应该是s吧


by HITACorz @ 2019-10-04 22:57:08

@charm1 Oh ,我的天呐,我沙雕了。 但是,刚刚试了下,第四个点还是RE……


by HITACorz @ 2019-10-04 22:57:46

@SadLava 谢谢大佬,等我学了vector以后一定会看您的代码


by charm1 @ 2019-10-05 12:30:41

    if(tao[i].xi<=(a+b))    
    {
        nw[i].xi=tao[i].xi;
        nw[i].yi=tao[i].yi;
        num++;
    }
    改为
            if(tao[i].xi<=(a+b))    
    { 
        num++;
        nw[num].xi=tao[i].xi;
        nw[num].yi=tao[i].yi;

    }

by charm1 @ 2019-10-05 12:31:01

@JryACtrying


by HITACorz @ 2019-10-05 13:24:00

@charm1 改了,但是结果跟原来一样! 1 2 AC 3 WA 4 RE 5 WA

昨天晚上我思考了一下,我的原来的代码有点复杂,sort多排了一次,第一次的高度没必要排序,只将力量排序然后进行高度判断就可以了 代码如下

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=5100;
struct tt{
    int xi;//hight
    int yi;//strength
}tao[MAX]; 
//  tt ;
//  tt nw[MAX];
bool comparisonxi(tt a,tt b){
    return a.xi<b.xi;
}
bool comparisonyi(tt a,tt b){
    return a.yi<b.yi;
}

int main()
{
    int n,a,s,xi,yi,b;
    int i;
    int num=0,temp=0;
    int k;
    cin>>n>>s>>a>>b;
    //scanf("%d%d%d%d",&n,&s,&a,&b);
    for(i=1;i<n;i++)
    {
        cin>>tao[i].xi>>tao[i].yi;
    //  scanf("%d%d",&xi,&yi);
    }
    sort(tao+1,tao+n+1,comparisonyi);
    for(i=1;i<=n;i++)
    {
        if(tao[i].xi==0)    continue;
        if(tao[i].xi<=(a+b)&&s>=0)  
        {
            s=s-tao[i].yi;
            num++;
        //  continue; 
        }
        else    continue;
     } 
     cout<<num;
    return 0;
}

这个的测评结果第四个不是RE了 测评结果是1 2 4 AC 3 5是WA,我的数据下载次数上限了,第3个数据下载不了,于是没办法继续调试了,于是不知道哪里出错


by HITACorz @ 2019-10-05 14:23:23

@charm1 大佬,我终于过了,我改了一下,好像是我对结构体的输入一开始有问题 下面这个代码AC了,谢谢你了!

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=5100;
struct tt{
    int xi;//hight
    int yi;//strength
}tao[MAX]; 
//bool comparisonxi(tt a,tt b){
//    return a.xi<b.xi;
//}
bool comparisonyi(tt a,tt b){
    return a.yi<b.yi;
}
int main()
{
    int n,a,s,xi,yi,b;
    int i;
    int num=0,temp=0;
    int k;
    cin>>n>>s>>a>>b;
    //scanf("%d%d%d%d",&n,&s,&a,&b);
    for(i=1;i<=n;i++)
    {
        cin>>tao[i].xi>>tao[i].yi;
    //  scanf("%d%d",&xi,&yi);
    }
    sort(tao+1,tao+n+1,comparisonyi);
    for(i=1;i<=n;i++)
    {
        if(tao[i].xi==0&&tao[i].yi==0)  continue;
        if(tao[i].xi<=(a+b)&&s>0)   
        {
            s=s-tao[i].yi;
            if(s>=0)
            num++;
        //  continue; 
        }
    //  else    continue;
     } 
     cout<<num;
    return 0;
 }

上一页 |