• HDU-2087-剪花布条


    链接:https://vjudge.net/problem/HDU-2087

    题意:

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

    思路:

    KMP模板,算得时候, 当j移到尾部时,res+1,j置为0,再继续。

    代码:

    #include <iostream>
    #include <memory.h>
    #include <vector>
    #include <map>
    #include <algorithm>
    #include <cstdio>
    #include <math.h>
    #include <queue>
    #include <string>
    
    using namespace std;
    
    typedef long long LL;
    
    const int MAXN = 1e3 + 10;
    
    int Next[MAXN];
    int lena, lenb;
    string a, b;
    
    void Get_Next()
    {
        int i = 0;
        int k = -1;
        Next[i] = k;
        while (i < lenb)
        {
            if (k == -1 || b[k] == b[i])
            {
                k++;
                i++;
                if (b[k] == b[i])
                    Next[i] = Next[k];
                else
                    Next[i] = k;
            }
            else
                k = Next[k];
        }
    }
    
    int Kmp()
    {
        int i = 0,j = 0;
        int res = 0;
        while (i < lena)
        {
            if (j == -1 || a[i] == b[j])
                i++,j++;
            else
                j = Next[j];
            if (j == lenb)
            {
                res++;
                j = 0;
            }
        }
        return res;
    }
    
    int main()
    {
        while (cin >> a)
        {
            if (a[0] == '#')
                break;
            cin >> b;
            lena = (int)a.length();
            lenb = (int)b.length();
            memset(Next, 0, sizeof(Next));
            Get_Next();
            cout << Kmp() << endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    AIX系统/var/adm/wtmp大文件处理
    script & scriptreplay
    Ubuntu/Debianpxe/isopreseed
    Ubuntu12.04安装gimp-2.8
    Ubuntu 3D特效一览
    Unix history图览
    Undelete Files on Linux Systems
    开源界有趣的循环缩写和LOGO
    Ubuntu上的dock
    linux下歌曲、视频、文件等乱码
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10505802.html
Copyright © 2020-2023  润新知