您的位置:首页 > 其它

hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站现场赛

2015-11-01 10:00 441 查看
做的重现赛。

主要思路:如果A是B的子串,且B是C的子串,显然有A是C的子串,所以没有必要去两个都判断。预处理一下相邻串之间的关系就可以过了,和去重的思路非常像。

如果只单纯判断是否为子串,strstr效率比KMP高。

#include<stdio.h>
#include<string.h>

using namespace std;

char in[512][2005];
int n;
int skip[512];

int solve() {
for(int i = n; i > 0; i--) {
for(int j = 1; j < i; j++) {
if(skip[j]) continue;
if(strstr(in[i], in[j]) == 0){
return i;
}
}
}
return -1;
}

int main() {
int t;
scanf("%d", &t);
for(int cas = 1; cas <= t; cas++) {
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%s", in[i]);
memset(skip, 0, sizeof(skip));
for(int i = 2; i <= n; i++) {
if(strstr(in[i], in[i-1])){
skip[i-1] = 1;
}
}
printf("Case #%d: %d\n", cas, solve());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: