• HDU2087剪花布条 KMP


    剪花布条

                                                                                                          Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
                                                                                                                                       Total Submission(s): 2819    Accepted Submission(s): 1884

    Problem Description

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
     

    Input

    输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
     

    Output

    输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
     

    Sample Input
    abcde a3
    aaaaaa aa
    #
     

    Sample Output
    0
    3
        KMP的应用,在一个母串中快速匹配子串,该题所做的改变就是在匹配过程中,当满足条件并不退出,而是继续匹配,看母串中究竟能够产生多少个子串。
      代码如下:
    #include <stdio.h>
    #include <string.h>
    
    char ob[1005], sub[1005];
    
    int next[1005], lob, lsub;
    
    void exgetnext( char *T, int *next )
    {
    	int k= 1, j= 0;
    	while( k< lsub )
    	{
    		if( j== 0|| T[k]== T[j] )
    		{
    			++j, ++k;
    			if( T[k]== T[j] )
    			{
    				next[k]= next[j];
    			}
    			else
    			{
    				next[k]= j;
    			}
    		}
    		else
    		{
    			j= next[j];
    		}
    	}
    }
    
    int kmp( char *ob, char *sub, int *next )
    {
    	int k= 0, j= 0, cnt= 0;
    	while( k<= lob )
    	{
    		if( j== 0|| ob[k]== sub[j] )
    		{
    			if( j== lsub )
    			{
    				cnt++;
    				j= 0;
    			}
    			++j, ++k;
    		}
    		else
    		{
    			j= next[j];
    		}
    	}
    	return cnt;
    }
    
    int main(  )
    {
    	while( scanf( "%s", ob+ 1 ), ob[1]!= '#' )
    	{
    		lob= strlen( ob+ 1 );
    		scanf( "%s", sub+ 1 );
    		lsub= strlen( sub+ 1 );
    		exgetnext( sub, next );
    		printf( "%d\n", kmp( ob, sub, next ) );
    	}
    }
    

  • 相关阅读:
    机器学习之逻辑回归
    机器学习之线性回归与模型保存
    机器学习之决策树
    机器学习之贝叶斯算法
    机器学习之KNN算法
    算法基础与开发流程
    特征选择与特征降维
    特征预处理
    RSA加密算法和签名算法
    Java中使用OpenSSL生成的RSA公私钥
  • 原文地址:https://www.cnblogs.com/Lyush/p/2116371.html
Copyright © 2020-2023  润新知