郑涵希 @ 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