60分,求助dalao,谢谢

P1478 陶陶摘苹果(升级版)

郑涵希 @ 2017-12-17 16:51:24

#include<bits/stdc++.h>
int main()
{
    int n,s,a,b,xi[99999],yi[99999],x[99999]={0},sum=0,t,h;
    scanf("%d %d",&n,&s);
    scanf("%d %d",&a,&b);
    for(int i=0;i<n;i++)
    {
        scanf("%d %d",&xi[i],&yi[i]);
        if(xi[i]<=a+b)
        x[i]=1;
        if(x[i]==0)
        {
            xi[i]=0;
            yi[i]=0;
        }
    } 
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i;j++)
        {
            if(yi[j]>yi[j+1])
            {
                t=yi[j];
                yi[j]=yi[j+1];
                yi[j+1]=t;
                h=xi[j];
                xi[j]=xi[j+1];
                xi[j+1]=h;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        s=s-yi[i];
        if(s<=0) break;
        if(s>=0&&yi[i]!=0&&xi[i]!=0)
        {
        sum++;
        }
    }
    printf("%d",sum);
    return 0;
}
###Why错了?

by Loner_Knowledge @ 2017-12-17 17:00:38

此题贪心即可。


by blackcode @ 2017-12-17 18:45:48

试了改了一下就可以 你可以参考一下。

你忽略两个情况 一个是s=0的时候苹果数应该加1的 就是最后判断的时候应该是 if(s<0)break;=0的情况是给下个if语句的。这样改是1345样例正确,还有一个错误是 xi 和yi是可以允许为0的你没考虑到,改成

if(s>=0&&(yi[i]!=0||xi[i]!=0)) 就是xi和yi有一个不为0就可以ac了 不过个人感觉严谨一点应该换个非常大的数就好了 不要使用0.


by 郑涵希 @ 2017-12-30 10:46:47

谢谢大佬@blackcode


|