为什么全wa,求dalao解释

P1478 陶陶摘苹果(升级版)

DFSlover @ 2018-01-10 21:20:35

为什么全wa,求dalao解释

#include<cstdio>
using namespace std;
int x[5001],y[5001];
int main()
{
    int n,m,a,b;
    scanf("%d%d%d%d",&n,&m,&a,&b);
    for(int i=1;i<=n;++i) scanf("%d%d",&x[i],&y[i]);
    for(int i=1;i<=n-1;++i)
        for(int j=i+1;j<=n;++j)
        if(y[i]>y[j])
        {
            int k=y[i];
            y[i]=y[j];
            y[j]=k;
            k=x[i];
            x[i]=x[j];
            x[j]=k;
        }
    int t;
    for(int i=1;i<=n;++i)
    if((a+b>=x[i])&&(m-y[i]>=0))
    {
        t++;
        m-=y[i];
    }
    printf("%d",t);
    return 0;
}

by Arcturus1350 @ 2018-01-10 21:32:05

用结构体写一下试试

这是我代码,仅供参考

#include<bits/stdc++.h>
using namespace std;
struct data{
    int y1;
    int x1;
    friend bool operator <(data q,data p){
        return q.y1<p.y1;
    }
}q[500000];
int a,b,n,s,max=-1,sum;
int main()
{
    cin>>n>>s;
    cin>>a>>b;
    b+=a;sum=s;
    for(int i=0;i<n;i++)
    {
        cin>>q[i].x1>>q[i].y1;
       //printf("%d %d\n",q[i].x1,q[i].y1);
    }
    sort(q,q+n);
   /* for(int i=0;i<n;i++)
    {
        printf("%d %d  %d\n",q[i].x1,q[i].y1,i);
    }*/
    int i=0,j=0;
    while(sum>0)
    {
       // printf("there %d  ",i);
        if(q[i].x1>b){
        //printf("goto %d\n",q[i].x1);
        i++;
        continue;
        }
        sum-=q[i].y1;
        //printf("%d  %d  %d\n",q[i].x1,i,sum);
        i++;
        j++;
    }
    if(sum<0) j--;
    printf("%d",j);
    return 0;
}

by DFSlover @ 2018-01-10 21:38:59

@cn:苏卿念 我这种蒟蒻对struct还不太熟,毕竟刚转c++,请问dalao能不能看看我的程序哪错了?


by Arcturus1350 @ 2018-01-10 21:52:54

知道哪里错了


by Arcturus1350 @ 2018-01-10 21:56:12

把第20行的

int t;

要不改为

int t=0;

要不就删去,在

int main()

前加

int t;

原因就是要是在主函数内定义变量的话不赋初值会死的很惨的。因为这样系统会直接随机给变量赋值

你的代码改完了就是这样:

#include<cstdio>
using namespace std;
int x[5001],y[5001];
int main()
{
    int n,m,a,b;
    scanf("%d%d%d%d",&n,&m,&a,&b);
    for(int i=1;i<=n;++i) scanf("%d%d",&x[i],&y[i]);
    for(int i=1;i<=n-1;++i)
        for(int j=i+1;j<=n;++j)
        if(y[i]>y[j])
        {
            int k=y[i];
            y[i]=y[j];
            y[j]=k;
            k=x[i];
            x[i]=x[j];
            x[j]=k;
        }
    int t=0;
    for(int i=1;i<=n;++i)
    if((a+b>=x[i])&&(m-y[i]>=0))
    {
        t++;
        m-=y[i];
    }
    printf("%d",t);
    return 0;
}

by si_zhong @ 2018-01-10 22:25:27

我发现这些简单的题目大家抢着答复。。。。。。而难的问题就一个人也没有。。。。。。


by si_zhong @ 2018-01-10 22:27:33

听说你是刚转C++


by 温情 @ 2018-01-11 09:46:58

@cn:苏卿念 2333...摘个苹果不至于用结构和重载运算符吧。


by DFSlover @ 2018-01-11 21:31:02

@chi_chi 不然呢,之前用p啊


by DFSlover @ 2018-01-11 21:34:32

@cn:苏卿念 谢谢,就是这里错了


by si_zhong @ 2018-01-11 21:36:19

@蒟蒻jlb 你的p我见识过了。。。。。。够厉害了。。。。。。


| 下一页