Почему возникает ошибка - «AddressSanitizer: распределителю не хватает памяти, пытаясь выделить 0x11780d838 байт» - PullRequest
0 голосов
/ 11 июля 2020

Почему этот код выдает ошибку распределения? Вопрос: -Дана строка, s, пусть U будет набором весов для всех возможных однородных непрерывных подстрок строки. Мне нужно ответить на n запросов, каждый из которых состоит из одного целого числа. Для каждого запроса выведите Да в новой строке, если он найден; в противном случае выведите №. Вес строки - это сумма весов всех символов строки. Например: для яблока = 1+ 16 + 16 + 12 + 5 Единая строка состоит из одного символа, повторяемого ноль или более раз. Например, ccc и a являются однородными строками, а bcb и cd - нет.

Пример: если строка s = abccddde, то возможной однородной строкой U является a = 1; b = 2; c = 3; cc = 3 + 3 = 6; d = 4; dd = 4 + 4 = 8; ddd = 4 + 4 + 4 = 12; е = 5; и если я ввожу вектор запроса {2,6,7,9,5}, вывод должен быть «да», если еще найти нет. ВЫХОД = {ДА, ДА, НЕТ, НЕТ, ДА}


            #include <bits/stdc++.h>
            using namespace std;
            void search(vector<int> v,int o,int item)
             {
                int low=0;int flag=0;
                  int high=o;
                   while(low<high)
                   { int mid= (low+high)/2;
                       if(v[mid]==item)
                      flag=1;
                    else if( v[mid]<item)
                         {
                            low=mid+1;
    
                               }
                             else 
                            high=mid-1;
                           }
                       if(flag==0)
                        cout<<"Yes"<<endl;
                        else 
                       cout<<"No"<<endl;
                             }
 
             // Complete the weightedUniformStrings function below.
                  void weightedUniformStrings(string s, vector<int> queries) 
                {
                 int n=s.length();int o;
    
                  int arsize= queries.size();

                  vector<int> v;
    
                    int l;int flag=0;
                   v[0]=s[0]-'a'+1;
                 for(int i=1;i<n;i++)
                {
        
                      if(s[i]==s[i-1])
                    {
                          v[i]=(s[i]-'a'+1)+v[i-1];
                       }
                     else 
                    v[i]= s[i]-'a'+1;

                      }
               o= v.size();
               for(int k=0;k<arsize;k++)
              {
                      int it= queries[k];
                      search(v,o,it);

               }
                  }


              int main()
              {
   
                   string s;
                   getline(cin, s);

                   int queries_count;
                   cin >> queries_count;
                   vector<int> queries(queries_count);

                  for (int i = 0; i < queries_count; i++) {
     
                      cin >> queries[I];
      
                      }

   
                  weightedUniformStrings(s, queries);


                    return 0;
                  }
...