博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bazinga(HDU5510+KMP)
阅读量:5109 次
发布时间:2019-06-13

本文共 1804 字,大约阅读时间需要 6 分钟。

t题目链接:

题目:

题意:找到一个编号最大的字符串满足:存在一个编号比它小的字符串不是它的字串。

思路:KMP。但是这题的复杂度极大,杭电服务器跑稳T,我还试了一发-_-||。想了很久想到一个玄学优化,我们首先比较相邻的两个字符串,假设为i和i-1,且i-1是i的字串,那么如果某个大编号包含i则必然包含i-1,此时就没有必要再和i-1跑一边KMP了。如下图所示:

代码实现如下:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 using namespace std;15 16 typedef long long ll;17 typedef pair
pll;18 typedef pair
pli;19 typedef pair
pil;;20 typedef pair
pii;21 typedef unsigned long long ull;22 23 #define lson i<<124 #define rson i<<1|125 #define bug printf("*********\n");26 #define FIN freopen("D://code//in.txt", "r", stdin);27 #define debug(x) cout<<"["<
<<"]" <
0 && s[x][i] != s[x][j+1]) j = nex[x][j];45 if(s[x][i] == s[x][j+1]) j++;46 nex[x][i] = j;47 }48 }49 50 bool kmp(int x, int y) {51 for(int i = 1, j = 0; i <= len[x]; i++) {52 while(j > 0 && (j == len[y] || s[x][i] != s[y][j+1])) j = nex[y][j];53 if(s[x][i] == s[y][j+1]) j++;54 if(j == len[y]) {55 return true;56 }57 }58 return false;59 }60 61 int main() {62 //FIN;63 scanf("%d", &t);64 int icase = 0;65 while(t--) {66 scanf("%d", &n);67 memset(vis, 0, sizeof(vis));68 for(int i = 1; i <= n; i++) {69 scanf("%s", s[i] + 1);70 len[i] = strlen(s[i] + 1);71 get_next(i);72 }73 int flag = 1;74 for(int i = n; i >= 2; i--) {75 if(kmp(i, i-1)) {76 vis[i-1] = 1;77 }78 }79 for(int i = n; i >= 2; i--) {80 for(int j = i - 1; j >= 1; j--) {81 if(!vis[j] && !kmp(i, j)) {82 flag = i;83 break;84 }85 }86 if(flag != 1) break;87 }88 printf("Case #%d: ", ++icase);89 if(flag != 1) printf("%d\n", flag);90 else printf("-1\n");91 }92 return 0;93 }

 

转载于:https://www.cnblogs.com/Dillonh/p/9424527.html

你可能感兴趣的文章
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
vue v-for下图片src显示失败,404错误
查看>>
EM算法
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
Hbase basic
查看>>
安装 Express
查看>>
EnterKey转换为TabKey(兼容IE,Firefox)
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
UVA 1602 Lattice Animals
查看>>
bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
查看>>
[笔记]STM32使用非8M晶振时如何修改代码
查看>>
个人对vue生命周期的理解
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
Section 1.2 dualpal
查看>>
存储(硬件方面的一些基本术语)
查看>>