Dla danych :
1
0
aaaaaa
Błędny wynik .
"Trzeci wiersz zawiera test T czyli ciąg liter alfabetu angielskiego zakończony znakiem nowego wiersza."
Zakładasz że dane wejściowe w drugim wierszu mają długość mniejszą od milion plus 1 .
Autor zadania pisze tylko że wiersz kończy się enterem .
char a[1000002],b[1000002];
scanf("%s",b);
Co jak wiersz będzie miał większą długość ??
Przy haszowaniu zawsze jest możliwość kolizji - więć gdy
if(hasz1==hasz2){
wtedy lepiej sprawdzić czy łańcuch znaków w tekście od pozycji n-tej jest równy wzorcowi - nie spowolni to algorytmu ( o ile kolizje są rzadkie ) a jest zawsze 100 procent pewności .
Czyli to co w kodzie jest zaznaczone jako komentarz lepiej pozostawić jako działający kod .