求助,为什么输入第二组测试数据后程序就会运行错误

P1478 陶陶摘苹果(升级版)

怪盗geek @ 2018-01-28 18:43:49

#include <iostream>

using namespace std;

int main()
{
    int n,s,a,b,i,j,temp,cnt=0;
    int *p=new int[n];
    int *q=new int[n];
    cin>>n>>s>>a>>b;
    for(i=0;i<n;i++)
        cin>>p[i]>>q[i];
    int high=a+b,mark=1;
    for(i=1;i<n;i++)
    {
        mark=1;
        for(j=0;j<n-i;j++)
        {
            if(q[j]>q[j+1])
            {
               temp=q[j];
               q[j]=q[j+1];
               q[j+1]=temp;
               temp=p[j];
               p[j]=p[j+1];
               p[j+1]=temp;
               mark=0;
            }
        }
        if(mark)break;
    }
    for(i=0;i<n;i++)
    {
        if(p[i]<=high&&s>=q[i])
        {
            cnt++;
            s-=q[i];
        }
        if(s<q[i])
            break;
    }
    for(i=0;i<n;i++)
        cout<<i<<" "<<p[i]<<" "<<q[i]<<endl;
    cout<<cnt;
    return 0;
}

测试数据是

100 100

20 80 1 99 2 98 3 97 4 96 5 95 6 94 7 93 8 92 9 91 10 90 11 89 12 88 13 87 14 86 15 85 16 84 17 83 18 82 19 81 20 80 21 79 22 78 23 77 24 76 25 75 26 74 27 73 28 72 29 71 30 70 31 69 32 68 33 67 34 66 35 65 36 64 37 63 38 62 39 61 40 60 41 59 42 58 43 57 44 56 45 55 46 54 47 53 48 52 49 51 50 50 51 49 52 48 53 47 54 46 55 45 56 44 57 43 58 42 59 41 60 40 61 39 62 38 63 37 64 36 65 35 66 34 67 33 68 32 69 31 70 30 71 29 72 28 73 27 74 26 75 25 76 24 77 23 78 22 79 21 80 20 81 19 82 18 83 17 84 16 85 15 86 14 87 13 88 12 89 11 90 10 91 9 92 8 93 7 94 6 95 5 96 4 97 3 98 2 99 1 100 0


by Rolston @ 2018-01-28 18:55:48

dalao操作太6看不懂

蒟蒻表示这就是个快排啊


by 怪盗geek @ 2018-01-28 19:33:27

我现在输入第二组测试数据可以得到正确答案14但是提交还是过不了第二个测试点,这是为什么啊


by 怪盗geek @ 2018-01-28 19:38:22

我刚才不用动态申请数组就可以ac了,有没有大佬解释一下


by Dog_Two @ 2018-01-28 19:45:16

动态内存把我秀翻了……


|