HDU 2087 字符串

#include <stdio.h>
#include <string.h>

void main()
{
    while(1)
    {
        char input1[1000] = {‘\0‘};
        char input2[1000] = {‘\0‘};
        int count = 0;

        scanf("%s", &input1);
        int len1 = (int)strlen(input1);
        if(input1[0] == ‘#‘)
            return;
        scanf("%s", &input2);
        int len2 = (int)strlen(input2);
        //对input1中的每len2个字符进行遍历
        for(int i = 0; i < len1;)
        {
            char tempBuf[1000] = {‘\0‘};
            //在input1中取得len2个连续字符
            for(int j = 0; j < len2; j++)
            {
                if((i + j) < len1)
                    tempBuf[j] = input1[i + j];
                else
                    break;
            }
            //比较
            if(strcmp(tempBuf, input2) == 0)
            {
                count++;
                i += len2;
            }
            else
                i++;
        }
        printf("%d\n", count);
    }
}
时间: 2024-12-25 23:18:07

HDU 2087 字符串的相关文章

hdu 2721(字符串处理,位运算 暴力)

Persistent Bits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 201    Accepted Submission(s): 116 Problem Description WhatNext Software creates sequence generators that they hope will produce

HDU 2087 剪花布条 KMP题解

KMP的应用,不过查找的时候注意一点就够了:查找到一个子串的时候,直接跳过整个串,而不是使用next数组前跳,因为根据题意需要剪出小饰条,小饰条之间不能重叠. const int MAX_N = 1001; char txt[MAX_N], pat[MAX_N]; int next[MAX_N], len; void genNext() { for (int i = 1, j = 0; i < len; ) { if (pat[i] == pat[j]) next[i++] = ++j; els

HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样.花纹条和小饰条不会超过1000个字符长.如果遇见#字符,则不再进行工作. Output输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行. Sample In

HDU - 2087 求不可重复字符串的匹配次数

只要KMP里对f[i]进行限制即可 /*H E A D*/ int nxt[maxn],f[maxn],ans; char T[maxn],P[maxn]; void buildNext(){ int m=strlen(P+1); int j=0; nxt[1]=0; rep(i,2,m){ while(j>0&&P[i]!=P[j+1]) j=nxt[j]; if(P[i]==P[j+1])j++; nxt[i]=j; } } void match(){ int n=strlen(

题解报告:hdu 2087 剪花布条(KMP入门)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样.花纹条和小饰条不会超过1000个字符长.如果遇见#字符

(KMP)剪花布条 -- hdu -- 2087

http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11793    Accepted Submission(s): 7574 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对

hdu 3973 字符串hash+线段树

http://acm.hdu.edu.cn/showproblem.php?pid=3973 Problem Description You are given some words {Wi}. Then our stupid AC will give you a very long string S. AC is stupid and always wants to know whether one substring from S exists in the given words {Wi}

HDU 2087 (KMP不可重叠的匹配) 花布条

题意: 用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案. 分析: 毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少. 和上一题 HDU 1686 不同,两个图案肯定不能在母串中有交叉的部分,所以当匹配成功一次后,应当滑动整个模式串的长度. 和上一题比,代码几乎不变,只是 j = next[j]; 变为 j = 0; 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1

hdu 2087(KMP的简单运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8742    Accepted Submission(s): 5722 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一