zoukankan      html  css  js  c++  java
  • HDU 2087 剪花布条 KMP入门

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

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

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

    Sample Input
    abcde a3 aaaaaa aa #
     

    Sample Output
    0 3
     


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s1[1005],s2[1005];
    int next[1005];
    void getnext(char *s2)
    {
    	int i=0,j=-1;
    	next[0]=-1;
    	while(i<strlen(s2))
    	{
    		if(j==-1||s2[i]==s2[j])
    		{
    			i++;
    			j++;
    			if(s2[i]!=s2[j])   
    				next[i]=j;
    			else                   
    				next[i]=next[j];
    		}
    		else
    			j=next[j];
    	}
    }
    int main()
    {
    	int s,t1,t2;
    	while(scanf("%s",s1))
    	{
    		s=0;
    		if(s1[0]=='#'&&s1[1]=='')
    			break;
    		scanf("%s",s2);	
    		t1=strlen(s1);
    		t2=strlen(s2);
    		getnext(s2);
    		
    		if(t2>t1)
    		{
    			cout<<0<<endl;
    			continue;
    		}
    		int i=0,j=0;
    		while(i<t1)
    		{
    			if(j==-1||s1[i]==s2[j])
    			{	
    				i++;
    				j++;
    			}	
    			else
    				j=next[j];
    			if(j==t2)
    			{
    				j=0;
    				s++;
    			}
    		}
    		cout<<s<<endl;
    	}
    	return 0;
    }

    作为模板吧。。


  • 相关阅读:
    纯CSS打造好看的按钮样式
    jQuery手机端触摸卡片切换效果
    CSS手动改变DIV高宽
    Windows 10 的音频和 MIDI API将统一
    美食网站响应式精美模板
    三道Javascript的练习题
    html5手机端遮罩弹出菜单代码
    CSS的::selection使用方法
    Html5绘制饼图统计图
    JQuery实现一个简单的鼠标跟随提示效果
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5181364.html
Copyright © 2011-2022 走看看