#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
void cal_next(const char *str, int *next, int len)
{
next[0] = -1;//next
int k = -1;
int q;
for (q = 1; q <= len-1; q++)
{
while (k > -1 && str[k + 1] != str[q])
{
k = next[k];
}
if (str[k + 1] == str[q])
{
k = k + 1;
}
next[q] = k;
}
}
int KMP(char *str, int slen,const char *ptr, int plen)
{
//int *next = new int[plen];
int *next = malloc(sizeof(int)*plen);
cal_next(ptr, next, plen);
int k = -1;
int i;
for (i = 0; i < slen; i++)
{
while (k >-1&& ptr[k + 1] != str[i])
k = next[k];
if (ptr[k + 1] == str[i])
k = k + 1;
if (k == plen-1)
{
return i-plen+1;
}
}
return -1;
}
int cleck_passwd()
{
int input_len = 1024;
const char *passwd = "supcon";
char str[input_len];
int result ;
gets(str);
if(input_len < strlen(str)){
printf("input over\n");
return -1;
}
if(KMP(str,input_len,passwd,8)<0){
result = -1;
return -1;
}
else
result = 0;
printf("cleck OK!\n");
return 0;
}
int main()
{
cleck_passwd();
return 0;
}