2.3.1(extra)
2016-03-25 16:04
295 查看
/* ID:18861501 LANG:C++ TASK:prefix */ /*------------------Header Files------------------*/ #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <algorithm> #include <cstdlib> #include <ctype.h> #include <cmath> #include <stack> #include <queue> #include <map> #include <vector> #include <limits.h> using namespace std; /*------------------Definitions-------------------*/ #define LL long long #define PI acos(-1.0) #define INF 0x3F3F3F3F /*---------------------Work-----------------------*/ //有点01背包的思想(DP思想) //用一个bool数组来记录字符串的某个位置能否被拓展到 //并且在更新拓展位置时同样也是以前面已经拓展的点来看后面(枚举所有的单词,看能拓展到后面那哪些点) //因为所给的单词最长也就10,所以总的来看这种方法效率还是可以接受了 char sear[210][15]; bool g[200050]; string str; void work() { int cnt=0; while(1) { scanf("%s",sear[cnt]); if(sear[cnt][0]=='.') break; cnt++; } string s=" "; while(cin>>s) str=str+s; //利用了string类 int len=str.length(),ans; memset(g,0,sizeof(g)); g[0]=true; for(int k=0;k<=len;k++) { if(g[k]) { ans=k; //ans取最大 for(int i=0;i<cnt;i++) { if(k+strlen(sear[i])<=len) { for(int j=0;j<strlen(sear[i]);j++) if(str[k+j]!=sear[i][j]) goto here; g[k+strlen(sear[i])]=true; here: ; } } } } cout<<ans<<endl; } /*------------------Main Function------------------*/ int main() { //freopen("test.txt","r",stdin); freopen("prefix.out","w",stdout); freopen("prefix.in","r",stdin); work(); return 0; }
相关文章推荐
- 2.3.2(wonderful)
- 那些年我们一起追过的缓存写法(一)
- Android实现插件化(热加载)和插件加密
- leetcode之 coin change
- tungsten内存分析
- 机器学习基础(二十)—— 数学语言与 Python 代码
- 码农小汪-struts2学习4-struts.xml 常用配置解析
- 操作系统典型调度算法
- java对象转换String类型
- 2.2.3
- 2.2.4(wonderful)
- HttpClient4.5简单使用
- min-height在安卓下不起作用
- 工作流设计
- 进程间通信--信号(进程间通信唯一的异步方式)
- 2.2.1(wonderful)
- 2.2.2(wonderful)
- 解决Android-PullToRefresh模块引用问题
- xshell 快捷键设置,使用大全
- 微服务(三)