C - 剪花布条 HDU-2087

解题思路:

求不重叠的匹配次数。

参考代码:

 1 #include <iostream>
 2 #include <vector>
 3 #include <map>
 4 #include <string>
 5 #include <queue>
 6 #include <stack>
 7 #include <set>
 8 #include <algorithm>
 9
10 #include <cstdio>
11 #include <cstring>
12 #include <cmath>
13 #include <cstdlib>
14 using namespace std;
15
16 const int INF=0x3f3f3f3f;
17 const int SIZE=10000;
18 typedef long long LL;
19
20 string a,b;
21 int nextt[1000005];
22 void nexxt()
23 {
24     memset(nextt,0,sizeof(nextt));
25     int j=0,k=-1;
26     nextt[0]=-1;
27     int len=b.size();
28     while(j<len)
29     {
30         if(k==-1||b[j]==b[k])
31         {
32             ++k;
33             ++j;
34             if(b[j]!=b[k])
35                 nextt[j]=k;
36             else
37                 nextt[j]=nextt[k];
38         }
39         else
40             k=nextt[k];
41     }
42 }
43
44 int kmp()
45 {
46     int i=0,j=0,ans=0;
47     int la=a.size(),lb=b.size();
48     while(i<la)
49     {
50         if(j==-1||a[i]==b[j])
51         {
52             i++;
53             j++;
54            // printf("i:%d j:%d\n",i,j);
55         }
56         else
57             j=nextt[j];
58         if(j==lb)
59         {
60             j=0;
61             ans++;
62         }
63
64     }
65     return ans;
66
67 }
68
69 int main()
70 {
71     while(cin>>a)
72     {
73          if(a=="#") break;
74          cin>>b;
75          nexxt();
76          printf("%d\n",kmp());
77     }
78     return 0;
79 }

时间: 2024-11-04 20:09:51

C - 剪花布条 HDU-2087的相关文章

剪花布条 HDU - 2087(kmp,求不重叠匹配个数)

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

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 剪花布条 KMP水题。。

剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10399    Accepted Submission(s): 6701 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含

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): 12000    Accepted Submission(s): 7683 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对

(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 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对

[HDOJ2087]剪花布条

题目链接: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): 11544    Accepted Submission(s): 7421 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一

剪花布条(kmp)

欢迎参加——每周六晚的BestCoder(有米!) 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11258    Accepted Submission(s): 7220 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条

C - 剪花布条 HDU2087( kmp找子串,子串不能有重叠 )

C - 剪花布条 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多

剪花布条

剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9295 Accepted Submission(s): 6047 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分

HDU2087 剪花布条【KMP】

剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32600 Accepted Submission(s): 19891 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据