Дана строка ? длиной в ? символов, и размер блока ?. В этой строке (? −?+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]; // массив нулевых массивов
→ Ссылка