usaco: Longest Prefix
来源:互联网 发布:剑三捏脸数据南风 编辑:程序博客网 时间:2024/05/08 14:01
把长的一个string输入之后,枚举每一个位置,看有没有一个primitive能和当前位置i匹配(匹配是指该位和该位置之前的所有位都能匹配出去)。和当前位置匹配的条件是:当前位置之前的length个元素和primitive中的每一位对应相等,并且i - length的位置已经匹配出去了(这样才能把长度加起来)。
似乎是dp吧,我不认识……
/*ID: LANG: C++TASK: prefix*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <vector>#define IN "prefix.in"#define OUT "prefix.out"using namespace std;string str;string pri[205];int total_pri;bool prefix[200005];int result;bool search(int place, int index){ if(place < -1) return false; for(int i = place + 1, j = 0; j < pri[index].size(); i++, j++) { if(str[i] != pri[index][j]) return false; } return true;}void solve(){ for(int i = 0; i < str.size(); i++) { for(int j = 0; j < total_pri; j++) { if(search(i - pri[j].size(), j) && (i - pri[j].size() == -1 || prefix[i - pri[j].size()])) { prefix[i] = true; break; } } }}int main(){ string tmp; freopen(IN, "rb", stdin); freopen(OUT, "wb", stdout); total_pri = 0; while(cin >> tmp && tmp != ".") pri[total_pri++] = tmp; str = ""; while(cin >> tmp) str += tmp; memset(prefix, false, sizeof(prefix)); solve(); result = 0; for(int i = 0; i < str.size(); i++) if(prefix[i]) result = i + 1; printf("%d\n", result); fclose(stdin); fclose(stdout); return 0;}
- usaco: Longest Prefix
- USACO Longest Prefix,DP
- usaco Longest Prefix
- USACO-Longest Prefix
- USACO Longest Prefix
- usaco Longest Prefix
- USACO 2.3 Longest Prefix
- USACO-Longest Prefix
- USACO :Longest Prefix解题报告
- USACO:Longest Prefix简单dp
- USACO Section 2.3 Longest Prefix
- USACO 2.3.1 Longest Prefix
- USACO--2.3Longest Prefix+DP
- USACO 2.3.1 Longest Prefix
- USACO Section 2.3 Longest Prefix
- USACO 最长前缀 Longest Prefix
- USACO 2.3 Longest Prefix 题解
- USACO-Section2.3 Longest Prefix
- ldconfig及 LD_LIBRARY_PATH
- 全国文代会和作代会今召开 将选举新一届领导机构
- 字符与字节的来源
- PROC编程基础
- 转JSONObject简介
- usaco: Longest Prefix
- 多态、静态初始化块
- java零碎知识总结(不断更新中)
- epoll使用
- c中左值,右值
- C/C++ 笔试、面试题目大汇总
- select 和poll函数调用驱动的poll->poll_wait 理解
- MVVM RadTreeView 树绑定数据源
- tcpdump 抓HTTP协议包