zoukankan      html  css  js  c++  java
  • HDU-2087 剪花布条 ( kmp )

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2087

    Problem Description
    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
     
    Input
    输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
     
    Output
    输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
     
    Sample Input
    abcde a3
    aaaaaa aa
    #
     
    Sample Output
    0
    3
     
    kmp模板题,直接上代码
     
     1 #include<iostream>
     2 #include<cstring>
     3 #include<string>
     4 using namespace std;
     5 
     6 string mstr;
     7 string zstr;
     8 int same[1005];
     9 
    10 void makesame(){
    11     memset( same, 0, sizeof( same ) );
    12 
    13     int p, k = 0;
    14 
    15     for( p = 1; p < zstr.size(); ){
    16         while( k > 0 && zstr[p] != zstr[k] )
    17             k = same[k];
    18         if( zstr[p] == zstr[k] ) k++;
    19         same[++p] = k;
    20     }
    21 }
    22 
    23 int kmp(){
    24     int ans = 0;
    25 
    26     int p = 0;
    27     for( int i = 0; i < mstr.size(); i++ ){
    28         while( p > 0 && mstr[i] != zstr[p] )
    29             p = same[p];
    30         if( mstr[i] == zstr[p] ) p++;
    31         if( p == zstr.size() ){
    32             ans++;
    33             p = 0;
    34         }
    35     }
    36     
    37     return ans;
    38 }
    39 
    40 int main(){
    41     ios::sync_with_stdio( false );
    42     
    43 
    44     while( cin >> mstr, mstr != "#" ){
    45         cin >> zstr;
    46         makesame();
    47         int ans = kmp();
    48         cout << ans << endl;
    49     }
    50 
    51     return 0;
    52 }
  • 相关阅读:
    MySQL主从复制
    Mysql解压版安装配置
    MySQL 多行数据合并 GROUP_CONCAT
    Java集合框架
    Redis 入门知识点
    事务
    Spring AOP 知识点入门
    Tomcat热部署和热加载
    Java的Socket通信简单实例
    nginx和tomcat配置负载均衡和session同步
  • 原文地址:https://www.cnblogs.com/hollowstory/p/5391982.html
Copyright © 2011-2022 走看看