Witam, mam takie zadanie (z MAIN):
Natalia ustawiła w rzędzie n smakołyków. Każdy smakołyk ma przypisany pewien rodzaj. Natalia może teraz
wybrać pewną liczbę (od 1 do n) sąsiednich smakołyków, a następnie je wszystkie zjeść. Jedynym warunkiem
jest to, aby żadne dwa smakołyki nie były tego samego rodzaju. Pomóż Natalii i znajdź liczbę sposobów, na
które może wybrać sąsiednie smakołyki.Wejście
Pierwszy wiersz wejścia zawiera dwie liczby całkowite n, m (1 ≤ n, m ≤ 1 000 000), oznaczające odpowiednio
liczbę smakołyków oraz liczbę dostępnych ich rodzajów. Drugi wiersz zawiera n liczb całkowitych
c0, c1, . . . , cn−1 (1 ≤ ci ≤ m), gdzie ci oznacza rodzaj i-tego smakołyka.Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać jedną liczbę całkowitą, równą liczbie sposobów, na które
Natalia może wybrać sąsiednie smakołyki.
Napisałem taki kod:
#include <iostream>
using namespace std;
void zerowanie(bool tablica[], int n)
{
for(int i = 0; i < n; i++)
tablica[i] = false;
}
int main()
{
int n, m;
int sposoby = 0;
cin >> n >> m;
int smakolyki[n];
bool sprawdzenie[m + 1];
for(int i = 0; i < n; i++)
cin >> smakolyki[i];
int j;
for(int i = 0; i < n; i++)
{
zerowanie(sprawdzenie, m + 1);
j = i;
while(j < n && !sprawdzenie[smakolyki[j]])
{
sposoby++;
sprawdzenie[smakolyki[j]] = true;
j++;
}
}
cout << sposoby << endl;
return 0;
}
Nie chce mi zaliczyć zadania, bo moje rozwiązanie przekracza czas. Jak je zoptymalizować? Zaznaczam, że dopiero uczę się programować i dlatego proszę o pomoc dla osoby na moim poziomie, żebym zrozumiał.