Почему этот код выдает ошибку распределения? Вопрос: -Дана строка, 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;
}