Я не могу понять этот код, пожалуйста, объясните мне, что происходит во второй строке цикла for.Не могу понять сокращенный код в palindrome
#include <cstdio>
char s[5005000];
int h[5005000];
const int M=3;
int main() {
scanf("%s",s);
int a=0,b=0,p=1,v=0;
for(int i=0;s[i];++i){
a=a*M+s[i],b+=s[i]*p,p*=M;
if(a==b)v+=(h[i+1]=h[(i+1)>>1]+1);
}
printf("%d\n",v);
return 0;
}
Отладка printf или шагающий шаг с любым разумным отладчиком, скорее всего, скажет так же, как любой ответ здесь. Вы тоже пробовали? – WhozCraig
Возможно, это также поможет, если вы замените эти однобуквенные имена переменных более описательными именами при расшифровке алгоритма. 's', например, можно было бы переименовать в' input_string'. –