2013-12-13 5 views
-1

Я решал эту проблему http://www.codechef.com/DEC13/problems/MARBLEGF/, и я не понимаю, почему я снова и снова получаю ошибку времени выполнения, может ли кто-нибудь помочь мне в этом? Спасибо заранее .. !! Heres код.В чем причина ошибки времени выполнения в следующем коде?

#include<iostream> 
using namespace std; 
int main() 
{ 
    long long int n; 
    long int q; 
    int i,a,b,sum_temp=0,flag=0; 
    char act[10]; 

    cin>>n; 
    cin>>q; 

    int array[n],temp[n],temp2[n]; 
    long int sum; 
    for(i=0;i<n;i++){ 
     cin>>temp[i]; 
     temp2[i]=0; 
     array[i]=0; 
    } 
    while(q>0){ 
     for(i=0;i<3;i++){ 
      cin>>act[i]; 
     } 
     act[3]='\0'; 
     a=act[1]-'0'; 
     b=act[2]-'0'; 
     if(act[0]=='S'){ 
      if(array[b]==0){ 
       for(i=0;i<=b;i++){ 
        if(i>0){ 
         array[i]=array[i-1]+temp[i]; 
        }else{ 
         array[i]=temp[i]; 
        } 
       } 
      } 
      sum_temp=0; 
      for(i=a;i<=b && flag==1;i++){ 
       sum_temp=sum_temp+temp2[i];   
      } 
      if(a>0){ 
       sum=(array[b]-array[a-1])+sum_temp; 

      } 
      else{ 
       sum=array[b]+sum_temp; 
      } 

      cout<<sum<<endl; 

     } 
     else if(act[0]=='G'){ 
      temp2[a]=b; 
      flag=1; 
     } 
     else if(act[0]=='T'){ 
      temp2[a]=-b; 
      flag=1; 
     } 
     q--; 
    } 



    return 0; 

} 
+0

Чтобы увеличить ваши шансы на получение ответа, я предлагаю вам лучше отформатировать код и попытаться описать ошибку более точно –

+0

http://codepad.org/cKo6ldBa – Abhineet

+0

Просьба предоставить компилируемый код. – Abhineet

ответ

0

EDIT:

По ссылке вы предоставили, диапазон N является 2 ≤ N ≤ 1000000.
Следовательно, как было предложено @Retired Ninja, существует вероятность того, что вы можете получить переполнение стека.

Решение: Используйте вектор.

Среди прочего, это не действует C++:

cin>>n; 
cin>>q; 

int array[n],temp[n],temp2[n]; 

Здесь п должна быть постоянная времени компиляции. Лучше использовать

std::vector<int> array(n); 

Одна из причин, почему вы получаете сообщение об ошибке времени выполнения это вы, возможно, доступ из границ массива:

b=act[2]-'0'; 
if(act[0]=='S'){ 
    if(array[b]==0){ 

Как вы знаете, здесь что б меньше массива размер?

Предлагаю вам запустить его через отладчик.

+0

Но как это решить проблему? Если код имеет ошибку времени выполнения, он компилируется, что означает расширение VLA. – juanchopanza

+0

Насколько велики эти массивы? Возможно, переполнение стека. –

+0

@juanchopanza см. Мое обновление. –

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