zoukankan      html  css  js  c++  java
  • 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP

    题目描述

    原题来自:HDU 2087

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

    输入格式

    输入数据为多组数据,读取到 # 字符时结束。每组数据仅有一行,为由空格分开的花布条和小饰条。花布条和小饰条都是用可见 ASCII 字符表示的,不会超过 1000个字符。

    注意:这个 # 应为单个字符。若某字符串开头有 #,不意味着读入结束!

    输出格式

    对于每组数据,输出一行一个整数,表示能从花纹布中剪出的最多小饰条个数。

    样例

    样例输入

    abcde a3
    aaaaaa aa
    #

    样例输出

    0
    3

    数据范围与提示

    对于全部数据,字符串长度 ≤1000

    题解

    就跑裸的KMP就行了。

    唯一要注意的是在匹配到时把k重置,就可以跑出来不相互覆盖的了。

     1 /*
     2 编号     题目     状态     分数     总时间     内存     代码 / 答案文件     提交者     提交时间
     3 #224299     #10043. 「一本通 2.2 例 1」剪花布条    Accepted     100     340 ms     252 KiB     C++ / 725 B     qwerta     2018-10-10 15:37:39
     4 */
     5 #include<iostream>
     6 #include<cstdio>
     7 using namespace std;
     8 int nxt[1003];
     9 int main()
    10 {
    11     //freopen("a.in","r",stdin);
    12     string s,t;
    13     while(cin>>s)
    14     {
    15         if(s.length()==1&&s[0]=='#')break;
    16         cin>>t;
    17         int k=-1,lens=s.length(),lent=t.length();
    18         nxt[0]=-1;
    19         for(int i=0;i<lent;++i)
    20         {
    21             while(k!=-1&&t[i]!=t[k+1])k=nxt[k];
    22             if(t[i]==t[k+1])k++;
    23             nxt[i+1]=k;
    24         }
    25         k=-1;
    26         int ans=0;
    27         for(int i=0;i<lens;++i)
    28         {
    29             while(k!=-1&&s[i]!=t[k+1])k=nxt[k];
    30             if(s[i]==t[k+1])k++;
    31             if(k==lent-1){ans++;k=-1;}
    32         }
    33         cout<<ans<<endl;
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/qwerta/p/9806757.html
Copyright © 2011-2022 走看看