2013-09-14 3 views
1

Я пытаюсь http://www.spoj.com/problems/BRCKTS/, я получил логику, но это дает ошибку сегментации при вводе строки. Я думаю, что проблема заключается в вставке символов в массив, не могу понять это.Решение BRCKTS на spoj

int main() { 
     int t = 10; 
     int l = 1; 
     do{ 
      int length_bracket; 
      char d; 
      cin>>length_bracket; 
      vector<char> word; 
     string output; 

     for(int i =0; i<length_bracket; i++) { 
      cin.get(d); 
      word.push_back(d); 
     } 

     int num_operations; 
     cin>>num_operations; 
     do{ 
      int n; 
      cin>>n; 

      if(n == 0) { 

       if(word[0] == ')' || word[length_bracket] == '(') { 

        output = output + "NO" + '\n'; 
       } 
       else { 
        int l1 = 0; int l2 = 0; 
        for(int i=0; i<length_bracket; i++) { 
         if(word[i] == ')') { 
          l1 = l1+1; 
         } 
         else { 
          l2 = l2+1; 
         } 
        } 
        if(l1 == l2 && l1 != 0 && l2 != 0) { 
         output = output + "YES" + '\n'; 
        } 
        else { 
         output = output + "NO" + '\n'; 
        } 
       } 
      } 

      else { 
       if(word[n-1] == '(') 
        word[n-1] = ')'; 
       else 
        word[n-1] = '('; 
      } 
      num_operations--; 
     }while(num_operations); 

     cout<<"Test"<<l<<endl; 
     l++;   

     cout<<output; 

     t--; 
    }while(t); 

    return 0; 
} 

ответ

0

только на короткое время поглядывая кода, я вижу, что вы обращаетесь к word[length_bracket] но word содержит только length_bracket символов, так что вы должны проверить word[length_bracket-1] вместо этого.

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