#include <stdio.h>
#include <string.h>
int next[10005];
char str1[1000005],str2[10005];
int cnt;
int ans=-1;
void get_next(int len2)
{
int i = 0,j = -1;
next[0] = -1;
while (i<len2)
{
if(j == -1 || str2[i] == str2[j])
{
i++;
j++;
next[i] = j;
}
else
j = next[j];
}
}
int kmp(int len1,int len2)
{
int i=0,j=0;
get_next(len2);
while(i<len1)
{
if(j==-1||str1[i]==str2[j])
{
++i;
++j;
}
else
j=next[j];
if(j == len2)
{
if(ans==-1)
ans=j;
cnt++;
j = next[j];
}
}
}
int main()
{
int n;
int len1,len2;
scanf("%d",&n);
int b,k=0;
while(n!=0){
b=n/2;
str1[k]=n-b*2+'0';
n=n/2;
k++;
};
str2[0]='1';
str2[1]='0';
str2[2]='1';
len1 = strlen(str1);
len2 = strlen(str2);
cnt = 0;
kmp(len1,len2);
if(ans==-1)
printf("%d %d\n",0,-1);
else
printf("%d %d\n",cnt,ans-3);
return 0;
}
33
最新推荐文章于 2024-02-06 14:18:26 发布