HDU——2087 剪花布条
2015-10-18 18:06
363 查看
剪花布条
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12052 Accepted Submission(s): 7717
Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3 aaaaaa aa #
Sample Output
0 3 由于怎么计算时间有点生疏,所以刚开始看见这道题认为平常方法会超时,所以呢,直接套的KMP的模板。结果,我被自己坑了。 KMP算法: #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #include<math.h> #include<string> #include<vector> #define M(i,n,m) for(int i = n;i < m;i ++) #define L(i,n,m) for(int i = n;i >= 0;i --) #define N(n,m) memset(n,m,sizeof(n)); const int MAX = 10010; using namespace std; int sum = 0; void getfail(char* P,int* f) { int m = strlen(P); f[0] = 0,f[1] = 0; M(i,1,m) { int j = f[i]; while(j && P[i] != P[j]) j = f[j]; f[i+1] = P[i] ==( P[j] ? j+1 : 0); } } void find(char* T,char* P,int* f) { int n=strlen(T),m=strlen(P); getfail(P,f); int j = 0; M(i,0,n) { while(j && P[j] != T[i]) j=f[j]; if(P[j] == T[i]) j ++; if(j == m) sum ++; } printf("%d\n",sum); } int main() { int f[1001]; char a[1001],b[1001]; while(~scanf("%s",a)) { if(a[0] == '#') break; sum = 0; N(f,0) scanf("%s",b); find(a,b,f); } return 0; }
普通方法,借鉴的同学的。(不过用G++提交的话就会WA)
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> #include <map> #include <set> using namespace std; const int maxx=1005; char a[maxx]; char b[maxx]; int main() { while(cin>>a) {
int sum=0; int i,j; if(strcmp(a,"#")==0) break; cin>>b; string s1=b; int d=strlen(a); int d1=s1.length(); for(i=0;i<d/d1;i++) { string s=a; long long t=s.find(s1); if(t>1005) break; else { sum++; for(j=t;j<t+d1;j++) { a[j]='0'; } } } cout<<sum<<endl; } return 0; }
相关文章推荐
- eclipse -- 工作中经常用到的快捷键(不断完善)
- ubuntu无法登陆问题收集
- 境外自然人不得以实际出资为由主张转让其在国内公司中享有的股权
- 九度OJ 1043:Day of Week(星期几) (日期计算)
- 九度OJ 1043:Day of Week(星期几) (日期计算)
- CGI程序里调用system、popen运行命令需要root权限---boa配置需要注意的问题
- Android按两次返回键退出程序
- 微信企业号api调用频率
- BroadcastReceiver
- JVM调优总结
- [转]Intent和PendingIntent的区别
- 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题解决方案参考
- Android Studio 真正国内SDK在线更新说明
- Android Studio 真正国内SDK在线更新说明
- 【图论】spoj two famous companies
- 九度OJ 1042:Coincidence(公共子序列) (DP)
- 信息安全系统设计基础第六周学习总结
- 九度OJ 1042:Coincidence(公共子序列) (DP)
- POJ 3250:Bad Hair Day 好玩的单调栈
- POJ 1631 Bridging signals(LIS 二分法 高速方法)