Дана строка ? длиной в ? символов, и размер блока ?. В этой строке (? −?+1) подстрок длины ? . Нужно раскрасить все подстроки в цвета
Я писал свой код на C++, но не прохожу по времени. Задачу решить на языке C++ Код снизу, не знаю как сократить время.
Файл lab2.txt содержит то же, что и в примере.
ссылка на задание(https://olympic.nsu.ru/nsuts-new/api/news/tour_statement?id=4589) смотреть задачу номер 4!
Спасибо!
#include <fstream>
#include <string>
using namespace std;
int main(){
int N, B;
char noun[7];
ifstream fin("lab2.txt");
fin.getline(noun, 7);
N = atoi(noun);
char buff[N];
fin.getline(buff, N);
for (unsigned int i = 0; i < sizeof(noun);i++) if (noun[i] != ' ') noun[i] = ' ';
B = atoi(noun);
int pars = N-B+1;
char matrix_str[pars][B];
char small_str[N];
int LEFT = 0;
string mass[pars];
string mass_first[pars];
while(LEFT < pars){
for (int j = LEFT; j < N+LEFT; j++){
if (j < B+LEFT) small_str[j] = buff[j];
else{
for (int k = LEFT;k<B+LEFT;k++){
matrix_str[LEFT][k] = small_str[k];
mass[LEFT] += matrix_str[LEFT][k];
}
break;
}
}
LEFT++;
}
for(int i = 0;i<pars;i++) mass_first[i] = mass[i];
for(int i = 0;i<N-B;i++){
for(int j = i+1;j<pars;j++){
if(mass[i] > mass[j]){
string tmp = mass[i];
mass[i] = mass[j];
mass[j] = tmp;
}
}
}
int i=0, output[pars], count = 0;
while(i<pars){
for(int j = 0;j<pars;j++){
if(mass[i] == mass_first[j]){
output[j] = count;
if(mass[i] != mass[i+1]) count++;
i++;
mass_first[j] = ' ';
j=0;
}
}
}
for(int i = 0;i<pars;i++) cout << output[i] << ' ';
return 0;
} ```
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
1 - не открывается условие задачи.
2 - программа работает неправильно. Сначала буфер очищается, а потом строка из пробелов переводится в целое int B = atoi(noun); В результате, если программа не упадет, в B может быть всё что угодно, но чаще всего будет 0 как негативный результат работы функции. А дальше пошло выделение массивов!!!
for (unsigned int i = 0; i < sizeof(noun);i++) // заполнение noun пробелами???
if (noun[i] != ' ')
noun[i] = ' ';
B = atoi(noun); // если программа не сломается, то B = 0
int pars = N-B+1; // если B>N , то pars - отрицательное
char matrix_str[pars][B]; // массив нулевых массивов