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;
}
答案 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。有休息的循环可能不是解决这个问题的方法。周日快乐!