各位dalao,求助!!!!

P1478 陶陶摘苹果(升级版)

18949691400加油! @ 2018-11-01 21:10:48

#include<bits/stdc++.h>
using namespace std;
int a[5001],x[5001];
int qsort(int l,int r)
{
    int i=l,j=r,mid=a[(l+r)/2];
    while(i<=j)
    {
       while(a[i]<mid)i++;
       while(a[j]>mid)j--;
       if(i<=j)
       {
            i++;j--;
            swap(a[i],a[j]);
            swap(x[i],x[j]);
       }
    } 
    if(l<j)qsort(l,j);
    if(i<r)qsort(i,r);
}
int main()
{
    int n,s,aa,bb,h,sum=0;
    cin>>n>>s>>aa>>bb;
    h=aa+bb;
    for(int i=1;i<=n;i++)
    cin>>x[i]>>a[i];
    qsort(1,n);
    for(int i=1;i<=n;i++)
    {
        if(s>=a[i]&&h>=x[i])
        {
            sum++;
            s-=a[i];
        }
        else
        break;
    }
    cout<<sum;
}

我把样例输进去,结果输出2,抓狂!!!!!!! 求助


by 一座城·守一人 @ 2018-11-01 21:22:25

如果你会STL的话建议你用sort()


by 一座城·守一人 @ 2018-11-01 21:24:46

这块错了

if(s>=a[i]&&h>=x[i])
        {
            sum++;
            s-=a[i];
        }
        else
        break;

by 一座城·守一人 @ 2018-11-01 21:26:01

应该写

if(s>=a[i]&&h>=x[i]){
    sum++;
    s-=a[i];
}
if(s<a[i])break;

by 一座城·守一人 @ 2018-11-01 21:26:15

@18949691400加油!


by 一座城·守一人 @ 2018-11-01 21:28:51

因为有可能在力气还够摘苹果的情况下身高不够。

这时候按照你的程序就跳出了。


by 一座城·守一人 @ 2018-11-02 21:45:06

@18949691400加油!

如果您学过结构体的话下面的代码应该可以看懂。

如果您没有学过的话在保证您的快速排序正确的前提下我再给您修改。

#include<bits/stdc++.h>
using namespace std;
struct apple {
    int a;
    int x;
};
apple a[5001];
bool cmp(apple a,apple b) {
    return a.a<b.a;
}
int main() {
    int n,s,aa,bb,h,sum=0;
    cin>>n>>s>>aa>>bb;
    h=aa+bb;
    for(int i=1; i<=n; i++)
        cin>>a[i].x>>a[i].a;
        sort(a+1,a+n+1,cmp);
    for(int i=1; i<=n; i++) {
        if(s>=a[i].a&&h>=a[i].x) {
            sum++;
            s-=a[i].a;
        } else if(s<a[i].a)break;
    }
    cout<<sum;
    return 0;
}

by 一座城·守一人 @ 2018-11-02 21:54:47

初步判断可能是你快速排序写错了

其实我也不会


by 18949691400加油! @ 2018-11-03 09:08:46

Thank you,dalao.终于AC了。


|