获得测试用例的意外输出

时间:2013-12-15 11:34:31

标签: c++

Codeforces问题372A - http://codeforces.com/problemset/problem/372/A

我的测试用例输出不正确。输入:

8 2 五 7 6 9 8 4 2

正确答案是6.我得到2。

我的解决方案:

    #include<iostream>
using namespace std;
int n,size[500000],i,j,noofkangaroo,temp;
int main()
{
    cin>>n;
    for(i=0;i<n;i++)
    cin>>size[i];

    for(i=0;i<n;i++) //Bubble sort.
    {
        for(j=0;j<(n-i-1);j++)
        {
            if(size[j]>size[j+1])
            {
                temp=size[j+1];
                size[j+1]=size[j];
                size[j]=temp;               
            }
        }
    }
    noofkangaroo=n;
    for(i=0;i<n;i++)
    {
        for(j=1+1;j<n;j++)
        {
            if((size[j]>=(2*size[i]))&&(size[j]!=-1)) //size[j]=-1 implies that kangaroo can't keep a kangaroo but can be kept by one.
            {
                noofkangaroo--;
                size[j]=-1;
                break;
            }
        }
    }
    cout<<noofkangaroo;
}

1 个答案:

答案 0 :(得分:1)

以下是添加了一些跟踪的代码:

#include<iostream>
using namespace std;
int n,size[500000],i,j,noofkangaroo,temp,num;
int main()
{
    cin>>n;
    for(i=0;i<n;i++)
    cin>>size[i];

    for(i=0;i<n;i++) //Bubble sort.
    {
        for(j=0;j<(n-i-1);j++)
        {
            if(size[j]>size[j+1])
            {
                temp=size[j+1];
                size[j+1]=size[j];
                size[j]=temp;               
            }
        }
    }
    noofkangaroo=n;
    for(i=0;i<n;i++)
    {
        j=i+1;
        while(j<=n)
        {
            if(size[i]==-1)
            { //Implies that the kangaroo is already keeping a kangaroo.
              num++;
              break;
            }
            if(size[j]>=(2*size[i]))
            {
                noofkangaroo--;
//                cout<<noofkangaroo<<endl;
//                size[j]=-1;
                break;
                size[j]=-1;
//                cout<<size[j]<<endl;
            }
            j++;
        }
    }
    for (i=0;i<n;i++)
      cout<<size[i]<<endl;

    cout<<noofkangaroo<<endl;
    cout<<num;
}

通过添加一些跟踪代码,它显示if(size[i]==-1)语句未被执行。这显然是因为@asif在评论中说size[j]=-1没有被执行。 以下是codeforces网站上测试数字的输出以及打印出的数组编号,最后是我添加的跟踪计数器num的值:

8
2
5
7
6
9
8
4
2
2
2
4
5
6
7
8
9
5
0

作为倒数第二个数字的5对于袋鼠的数量是正确的,但最后的0(以及数组中的值)表明您没有像预期的那样将数组值设置为-1。有休息的循环可能不是解决这个问题的方法。周日快乐!