2013-12-15 2 views
0

Codeforces 372A- http://codeforces.com/problemset/problem/372/AПолучение неожиданный выход для теста проблемы

Я получаю неправильный выход для тестового case.Input:

Правильный ответ: 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

Заявления после 'break;' не будут выполнены. Попробуйте поместить 'size [j] = - 1' перед оператором break. – asif

+0

@ asif-I исправил это. Сделал несколько других исправлений. Теперь я получаю неправильный ответ для тестового примера 1. –

+0

Это означает, что вы на самом деле не решили проблему. вам просто удалось сопоставить некоторые тестовые примеры. Попытайтесь подойти к проблеме по-разному. С учетом ограничений, я думаю, что сортировка пузыря вызовет ошибку «Превышение времени». Попробуйте использовать функцию STL 'sort'. – asif

ответ

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, как вы и предполагали. Петли с перерывами, возможно, не могут решить эту проблему. Счастливое воскресенье!

Смежные вопросы