有个神奇的问题

P1478 陶陶摘苹果(升级版)

ChengZe @ 2019-01-05 01:08:35

第一份代码#3,5RE,第二份代码AC,差别是cmp的判断,但蒟蒻不知道为什么会这样(有没有加等于的问题) 其中a.b指力气,a.a指高度

#include <bits/stdc++.h>
using namespace std;
struct apple{
    int a,b;
}a[5001];

bool cmp(apple a,apple b){
    return a.b<=b.b;
}

int main()
{
    int n,s,ans=0;cin>>n>>s;
     int aa,b;cin>>aa>>b;
     for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b;
     sort(a+1,a+1+n,cmp);
     for(int i=1;i<=n;i++){
        if(s>=a[i].b&&a[i].a<=aa+b){
            ans++;
            s-=a[i].b;
         }
         if(s<0)break;
     }
     cout<<ans;
     return 0;
}

---第二份---

#include <bits/stdc++.h>
using namespace std;
struct apple{
    int a,b;
}a[5001];

bool cmp(apple a,apple b){
    return a.b<b.b;
}

int main()
{
    int n,s,ans=0;cin>>n>>s;
     int aa,b;cin>>aa>>b;
     for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b;
     sort(a+1,a+1+n,cmp);
     for(int i=1;i<=n;i++){
        if(s>=a[i].b&&a[i].a<=aa+b){
            ans++;
            s-=a[i].b;
         }
         if(s<0)break;
     }
     cout<<ans;
     return 0;
}

by GNAQ @ 2019-01-05 07:27:23

std::sort() 要求你 compare 函数返回 true 是当且仅当传进去的第一个元素严格小于第二个元素啊。。要不然你想象一下,所谓的“相等”也被视作小于,那多个“相等”元素,或者全是“相等”元素的序列不就一直在交换了,这可还行?


by disangan233 @ 2019-01-05 08:13:22

@GNAQ orz


by ChengZe @ 2019-01-05 21:54:34

@GNAQ orz


|