满分但不懂求助

P1478 陶陶摘苹果(升级版)

ln001 @ 2022-10-19 14:54:59

自己写的代码,但不知道为什么要战术-1 。。。

#include <bits/stdc++.h>
using namespace std;
struct pg{
    long long zl;
    long long gd;
};
long long n,s,a,b;
vector<pg> v;
bool cmp1(pg shu1,pg shu2){return shu1.zl<shu2.zl;}
int main(){
    cin>>n>>s;
    cin>>a>>b;
    if(n==0){cout<<0;return 0;}
    a+=b;
    v.reserve(n);
    for(long long i=0;i<n;i++){
        cin>>v[i].gd;
        cin>>v[i].zl;
    }
    sort(v.begin(),v.begin()+n,cmp1);
    long long i=0,p=0;
    while(s>=0){
        if(v[i].gd<=a){
            s-=v[i].zl;
            p++;
        }
        i++;
    }
    cout<<--p;
    return 0;
}

by xingke233 @ 2022-10-19 15:07:43

@ln001

3 3
10 6
11 1
12 1
13 1

by xingke233 @ 2022-10-19 15:08:00

@ln001

应该输出 3


by xingke233 @ 2022-10-19 15:09:52

@ln001

while(s>=0){
        if(v[i].gd<=a){
            s-=v[i].zl;
            p++;
        }
        i++;
    }

当 s<v[i] 的时候 程序还是 p++

但这已经不满足了,所以你最后 -1

只能说数据太水了


by xingke233 @ 2022-10-19 15:12:23

@ln001

并且 while 语句写的很奇怪

3 4
10 6
11 1
12 1
13 1

完全可以 hack 程序


by LF_Eternity @ 2022-10-19 15:19:46

力气不够也不能摘啊! 在样例中你已经力气不够摘了,可是你却没判断


by LF_Eternity @ 2022-10-19 15:23:49

@xingke233 不是太水了,无论怎样都会变成负数(除非淘淘的力气可以摘所有的苹果)


by xingke233 @ 2022-10-19 15:24:41

@L_Y_F

没有特殊数据卡


by ln001 @ 2022-10-19 17:42:34

@L_Y_F 还是不明白啊


|