Salve, stavo provando a risolvere Stringhe di Fibonacci, la mia soluzione genera tutte le stringhe di fibonacci fino alla dimensione Nesima e poi tramite la ricerca binaria sceglie quella migliore verificando se il “pattern” è lo stesso di quella generata. Avete consigli su come migliorare l’implementazione?
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int N;
cin >> N;
string S;
cin >> S;
int sumFib[N + 1];
sumFib[0] = 1;
sumFib[1] = 1;
for (int i = 2; i <= N; i++)
sumFib[i] = sumFib[i - 1] + sumFib[i - 2];
string fib[N + 1];
fib[0] = "b";
fib[1] = "a";
for (int i = 2; i <= N; i++)
fib[i] = fib[i - 1] + fib[i - 2];
int l = 0, r = 1;
for (; sumFib[r] <= N; r++);
while (l < r - 1)
{
int m = (l + r) / 2;
int flag = false;
for (int i = 0; i <= N - sumFib[m]; i++)
{
map<char, bool> cnt;
cnt['a'] = 1;
cnt['b'] = 0;
cnt[S[i]] = 0;
int x;
bool diff = false;
for (x = i; x <= i + sumFib[m] - 1; x++)
{
if (cnt[S[x]] != cnt[fib[m][x-i]])
{
if (!diff)
{cnt[S[x]] = 1; diff = true;}
else break;
}
}
if (x == i + sumFib[m])
{
flag = true;
break;
}
}
if (flag)
r = m;
else
l = m;
}
cout << l;
}