(简单) 搜索 HOJ 1066 Substrings
2014-02-08 09:51
2076 查看
Substrings
My Tags | (Edit) |
---|
Source : ACM ICPC Tehran 2002 Preliminery Contest | |||
Time limit : 1 sec | Memory limit : 32 M |
Input[/b]
The first line of the input file contains a single integer t (1<=t<=10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1<=n<=100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.
Output[/b]
There should be one line per test case containing the length of the largest string found.
Sample Input[/b]
2 3 ABCD BCDFF BRCD 2 rose orchid
Sample Output[/b]
2 2
题意:给一系列字符串,找出一个字符串X使得任意给的字符串里面都能找到X或者是反过来的X,然后要输出最大的X的长度,这里有点坑 ,是字符的值得和最大的长度,而不是长度最长的。
思路: 暴搜吧 反正也是0ms过
代码:#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<string>#include<deque>#include<queue>#include<math.h>#include<vector>using namespace std;#define MAX 100000+10#define MOD 99997const int inf = 0xfffffff;
char input[110][110];int len[110];
int n;
bool isOk(char s[] , int s_len){ int move = 1; bool flag; for (int i = 2 ; i <= n ; ++i) { flag = false; for (int j = 1 ; j <= len[i]-s_len+1 ; ++j) if (input[i][j]==s[1]) { int k = 1; while (k<=s_len && s[k]==input[i][j+k-1]) ++k; if (k==s_len+1) { flag = true; break; } } if (flag) continue; for (int j = 1 ; j <= len[i]-s_len+1 ; ++j) if (input[i][j]==s[s_len]) { int k = 1; while (k<=s_len && input[i][j+k-1]==s[s_len-k+1]) ++k; if (k>s_len) { flag = true; break; } } if (!flag) return false; } return true;}int main(){ int T; cin>>T; while (T--) { scanf("%d",&n); int k = 1; for (int i = 1 ; i <= n ; ++i) { scanf("%s",input[i]+1); len[i] = strlen(input[i]+1); k = !k; } bool flag = false; k = !k; char X[110]; int X_len = 0; int largest = -inf; int ans = 0; for (int i = 1 ; i <= len[1] ; ++i) { X_len = 0; int j = i; int sum = 0; while (j <= len[1]) { X[++X_len] = input[1][j]; sum += input[1][j]; if (sum>largest && isOk(X,X_len)) { largest = sum; ans = X_len; } ++j; } } printf("%d\n",ans); }}
相关文章推荐
- poj1111 hoj 1639 Image Perimeters 简单搜索
- Go hdu 4158 hoj 简单搜索
- HOJ 1440 Knight Moves -------简单搜索 BFS 求l两点之间最小的到达步数
- hdu 4158 hoj 2581 Go 简单搜索
- (简单)搜索 HOJ 1022 Spacecraft Malfunction
- (简单)搜索 HOJ 1030 Labyrinth
- (简单) 搜索 HOJ 1044 Transportation
- (简单) 搜索 HOJ 1048 Cipher
- hoj 1066 Substrings
- (简单)搜索 HOJ 1070 Word
- (简单)搜索 HOJ 1075 The Castle
- (简单) 搜索 HOJ 1085 Finding Rectangles
- (简单)搜索 HOJ 1692 Choose Your Own Adventure
- (简单) 搜索 HOJ 1097 Robot
- (简单) 搜索 HOJ 1105 Egyptian Multiplication
- (简单) 搜索 最短路 HOJ 1121 Erdos Numbers
- HDU 2612 Find a way([kuangbin带你飞]专题一 简单搜索)
- Google搜索实用技巧简单整理(有示例)
- asp.net mvc 简单搜索功能
- Codeforces Round #176 (Div. 2) A. IQ Test(简单搜索)