POJ3461 KMP

来源:互联网 发布:爱思维尔数据库收费 编辑:程序博客网 时间:2024/06/02 08:22
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<algorithm>#include<set>#include<map>#include<queue>#include<vector>#include<stack>using namespace std;#define ll long long #define ull unsigned long long #define mxn 1002000#define eps 1e-8char t[mxn], w[mxn];int f[mxn];void getf() {int n = strlen( w );f[0] = f[1] = 0;for( int i = 1; i <= n; ++i ) {int j = f[i];while( j && w[j] != w[i] )j = f[j];f[i+1] = w[i] == w[j] ? j + 1 : 0;}}int find() {int n = strlen( t );int nw = strlen( w );getf();int j = 0;int ret = 0;for( int i = 0; i < n; ++i ) {while( j && t[i] != w[j] )j = f[j];if( t[i] == w[j] )j ++;if( j == nw )ret++;}return ret;}int main() {int cas; scanf( "%d", &cas ); while( cas-- ) { scanf( "%s", w ); scanf( "%s", t ); printf( "%d\n", find() ); } return 0;}

0 0
原创粉丝点击