zoukankan      html  css  js  c++  java
  • C

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

    Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。 
    Output输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。 
    Sample Input

    abcde a3
    aaaaaa  aa
    #

    Sample Output

    0
    3
    用kmp求出前缀数组,然后判断有多少个匹配的字符串
    #include<iostream>
    #include<cstring>
    #include<string >
    #include<cstdio>
    #include<vector>
    using namespace std;
    const int N=1e5+7;
    int nxt[N];
     
    int main(){
        string a,b;
        while(cin>>a){
            memset(nxt,0,sizeof(nxt));
            if(a=="#")
                 break;
            cin>>b;
            
    //字符串的拼接
    //----------------------------        
            int a1=a.size();
            int b1=b.size();
            string c=b+'#'+a;
            int x=c.size();
    //核心波分就是求nxt前缀数组      
    //---------------------------------        
            for(int i=1;i<x;i++){
                int j=nxt[i-1];
                while(c[i]!=c[j]&&j>0) j=nxt[j-1];
                if(c[i]==c[j])  j++;
                nxt[i]=j;
            }
    //------------------------------- 
            int res=0;
            for(int i=b1+1;i<x;){
                if(nxt[i]==b1){
                    res++;
                    i=i+b1;
                }
                else i++;
            }
            printf("%d
    ",res); 
        }
        return 0;
    }
  • 相关阅读:
    PHP中的list(),each(),reset()函数应用
    echo(),print(),print_r()
    Math.floor() 与 parseInt()
    利用Node.js轻松创建web服务器
    MySQL中Datetime与Timestamp
    修正正则匹配日期---基于网络未知大神的正则
    数据结构随笔-php实现栈
    数据结构随笔-php实现队列
    Js 获取时间戳
    linux 安装nginx+php+mysql
  • 原文地址:https://www.cnblogs.com/Accepting/p/11366182.html
Copyright © 2011-2022 走看看