Archive for the '共同分享' Category

使用正则表达式

星期五, 十一月 21st, 2008

使用正则表达式

[原文地址] http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=regularExpressions

[翻译] liruqi

介绍

正则表达式是一个描述匹配模式的特殊的字符串。相信你们中许多人已经在输入例如ls(dir) *.txt的时候见过并使用正则表达式,来获取扩展名为txt的文件列表。正则表达式不仅仅用于模式匹配,也可以进行文本处理。在SRM中正则表达式用起来非常方便。许多需要一些代码量的问题,可以用正则表达式几行搞定,非常飘逸。

正则表达式的具体描述

一个正则表达式(regex)是一个或者多个非空的分支,用‘|’分隔开。它匹配任意一个括号中的匹配模式。下面的正则表达式可以匹配三个单词”the”, “top”, “coder”中的任意一个。

REGEX is : the|top|coder

INPUT is : Marius is one of the topcoders.

Found the text ”the” starting at index 17 and ending at index 20.

Found the text ”top” starting at index 21 and ending at index 24.

Found the text ”coder” starting at index 24 and ending at index 29.

一个分支是一个或者多个块连接而成。每个块匹配了,一个分支才匹配。

一个块是一个原子表达式(不可再分的符号),后面很可能跟着’*', ’+', ’?', 或者边界。原子表达式跟着’*'匹配一个能够跟原子表达式匹配0次或多次的序列。原子表达式跟着’+'匹配一个能够跟原子表达式匹配1次或多次的序列。原子表达式跟着’?'匹配一个能够跟原子表达式匹配0次或1次的序列。

下面的正则表达式匹配任何连续出现的单词’top’ 和 ’coder’.

REGEX is: (top|coder)+

INPUT is: This regex matches topcoder and also codertop.

Found ”topcoder” starting at index 19 and ending at index 27.

Found ”codertop” starting at index 37 and ending at index 45.

一个范围是指’{‘跟着一个无符号十进制整数,可能跟着一个’,',可能跟着另一个十进制整数,总是跟着’}'。如果有两个整数,前面一个不能够大于后面一个。一个原子表达式跟着一个只有一个整数i没有逗号的范围,匹配一个刚好匹配i个原子表达式的连续序列。一个原子表达式跟着一个只有一个整数并带上逗号的范围,匹配一个匹配i个或者更多个的原子表达式的连续序列。一个原子表达式跟着一个两个整数i和j的范围,匹配一个匹配从i个到j个的原子表达式的连续序列。下面的正则表达式匹配长度为2,3,4的’1′字符串。

REGEX is: 1{2,4}

INPUT is: 101 + 10 = 111 , 11111 = 10000 + 1111

Found the text ”111″ starting at index 11 and ending at index 14.

Found the text ”1111″ starting at index 17 and ending at index 21.

Found the text ”1111″ starting at index 33 and ending at index 37.

我们不难观察到,该过程贪心地匹配最长的可匹配序列,而且匹配不能重叠。一个原子表达式是包含在’()’中的(匹配一个正则表达式模式),一个括号表达式(看下面),’.'(匹配任意一个字符),’^'(匹配行首的空字符串),’$'行尾的空字符串),\’后面跟着`^.[$()|*+?{\'中任意一个(将其当作一般字符)或者一个没有其它意义的字符(匹配单个字符)。还有另外一种类型的原子表达式,引用符'\'后面跟着一个非0的十进制数d,匹配前面出现的第d个括号内的子表达式匹配的序列(根据子表示的左括号的位置从左到右编号)。因此,例如'([bc]\1)’匹配’bb’或者’cc’,但是不匹配’bc’。

下面的正则表达式匹配两个由小写字母组成的、并以任意字符隔开的单词。

Current REGEX is: ([a-z]+).\1

Current INPUT is: top-topcoder|coder

I found the text ”top-top” starting at index 0 and ending at index 7.

I found the text ”coder|coder” starting at index 7 and ending at index 18.

一个括号表达式是一个字符表包含在’[]‘中。它一般匹配字符表中的任意单个字符。如果字符表是以’^'开头的,它匹配任意不字符表中的单个字符。如果字符表中两个字符被’-'隔开,那么这是一个表示字符闭区间的简写(例如,’[0-9]‘ 匹配任何数字)。除了’]',’^',’-' 之外的所有特殊字符,包括’\',在括号表达式中都没有特殊意义。

下面的正则表达式匹配任意三个不是’b',’c',’d' 开头,且‘at’结尾的连续字符

Current REGEX is: [^b-d]at

Current INPUT is: bat

No match found.

Current REGEX is: [^b-d]at

Current INPUT is: hat

I found the text ”hat” starting at index 0 and ending at index 3.

这个例子组合了上面讲到的大多数的概念。正则表达式匹配一个html标签的起始、结束对。

REGEX is: <([a-zA-Z][a-zA-Z0-9]*)(()|[^>]*)>(.*)</\1>

INPUT is: <font size=”2″>TopCoder is the</font> <b>best</b>

Found ”<font size=”2″>TopCoder is the</font>” starting at index 0 and ending at index 37.

Found ”<b>best</b>” starting at index 38 and ending at index 49.

([a-zA-Z][a-zA-Z0-9]*) 匹配任意一个起始为字母,后跟字母或者数字的单词。(() | [^>]*) 匹配空字符串或者不以’>’结尾的任意字符串。\1将会被前面与([a-zA-Z][a-zA-Z0-9]*)匹配的单词替换掉。

上面的描述是一个基本正则表达式内容的覆盖。一个按照以上规则写出来的正则表达式应该都可以在Java(>=1.4) 和 C++(POSIX EXTENDED)环境里工作。如果想更深入地了解的不同语言的扩展支持,你可以查看参考部分的内容。

使用正则表达式

Java语言

java(1.4或以上)有一个包”java.util.regex”,可以容许使用正则表达式。

这个包包含三个类:Pattern, Matcher 和 PatternSyntaxException.

一个Pattern对象是一个编译了的正则表达式形式。Pattern类不提供公共的构造函数。要创建一个pattern,你必须调用一个公共静态的编译方法,然后返回一个Pattern对象。

一个Mather对象是解释pattern并对输入字符串执行匹配操作的引擎。像Pattern类一样,Matcher没有定义公共的构造函数。你可以通过在Pattern对象中调用公共的匹配方法来得到一个Matcher实例。

一个PatternSyntaxException对象是一个找到正则表达式有语法错误的未检查的异常。

例子(从参考[4]上抄的):

Pattern pattern;

Matcher matcher;

pattern = Pattern.compile(<REGEX>);

matcher = pattern.matcher(<INPUT>);

boolean found;

while(matcher.find()) {

System.out.println(“Found the text \”" + matcher.group() +  ”\” starting at index ” + matcher.start() + ” and ending at index ” + matcher.end() + ”.”);

found = true;

}

if(!found){

System.out.println(“No match found.”);

}

Java String 类中也提供了下列方法:

boolean matches(String regex) 返回当前字符串是否匹配正则表达式regex

String replaceAll(String regex,String replacement) 返回一个字符串,该字符串是用replacement替换掉当前字符串中所有匹配表达式regex的字串。

String replaceFirst(String regex, String replacement) 返回一个字符串,该字符串是用replacement替换掉当前字符串中第一个匹配表达式regex的字串。

String[] split(String regex) 从匹配regex的子串上断开,将当前字符串分割未若干子串.

C++语言

许多Topcoder成员相信在tc赛场上正则表达式是Java相较于C++的一个强大的优势。但C++程序员不必因此绝望,因为正则表达式也可以在C++里使用。

有很多的C++的正则表达式解释库可以用,不幸的是,它们不是很兼容。但幸运的是,作为一个tc赛场上的成员,我们不需要应付这么多的互不兼容的库。如果你打算在比赛中用正则表达式,你只需要在POSIX_regex和GNU_regex两个API中选择其中一个即可。要使用这些API,头文件”regex.h”必须包含。它们都需要进行两个步骤:先通过一个函数调用来编译正则表达式,然后通过另外一个函数调用使用编译好的正则表达式来搜索或者匹配一个字符串。

下面是两个API的简短的描述,喜欢哪一个由你自己来决定了。

POSIX_regex

包含对两种不同的正则表达式语法的支持—基本的和扩展的。基本的正则表达式类似于ed的语法;扩展的正则表达式更像egrep中的,增加了|, +?运算符,不需要在括号里的子表达式或者大括号里的范围加反斜杠。基本的是默认的,但是更多人喜欢扩展的正则表达式。

你可以通过POSIX搜索一个给定的正则表达式,你不能够匹配她。要实现搜索,你必须先在一个模式缓冲区中用regcomp编译她。表达式编译到了模式缓冲区之后,你可以在一个null结尾的字符串中使用regexec搜索该模式。如果regcomp或者regexec函数执行失败,她们会返回错误代码。你可以用regerror来获取错误信息。你必须用regfree来释放为模式缓冲区分配的内存。

可以从参考目录[2][3]中获取这些函数使用方法的深入描述。

例子:

下面是一段展示如何使用这些函数的代码片段:

regex_t reg;

string pattern = ”[^tpr]{2,}”;

string str = ”topcoder”;

regmatch_t matches[1];

regcomp(®,pattern.c_str(),REG_EXTENDED|REG_ICASE);

if (regexec(®,str.c_str(),1,matches,0)==0) {

cout << ”Match ”

cout << str.substr(matches[0].rm_so,matches[0].rm_eo-matches[0].rm_so)

cout << ” found starting at: ”

cout << matches[0].rm_so

cout << ” and ending at ”

cout << matches[0].rm_eo

cout << endl;

} else {

cout << ”Match not found.”

cout << endl;

}

regfree(®);

GNU_regex

GNU_regex的API有更丰富的函数。你可以用她来匹配一个字符换或者在一个字符串中模式搜索。这些函数的使用方法类似于POSIX提供的函数的使用方法:首先必须用re_compile_pattern来编译模式,获取用于搜索和匹配的的模式缓冲区。搜索和匹配的函数分别是re_searchre_match。如果是搜索的话,一个fastmap可以用来优化搜索速度。没有fastmap,搜索算法试图在字符串中一些连续的位置匹配模式。Fastmap告诉算法一个匹配可以从那个字符开始。Fastmap可以用re_compile_fastmap来构造。GNU_regex同时提供了re_searchre_match2函数用于搜索和匹配一段数据。你必须用regfree来释放为模式缓冲区分配的内存。

可以从参考目录[3]中获取这些函数使用方法的深入描述。

例子:

string pattern = ”([a-z]+).\\1″;

string str = ”top-topcoder|coder”;

re_pattern_buffer buffer;

char map[256];

buffer.translate = 0;

buffer.fastmap = map;

buffer.buffer = 0;

buffer.allocated = 0;

re_set_syntax(RE_SYNTAX_POSIX_EXTENDED);

const char* status = re_compile_pattern(pattern.c_str(),pattern.size(),&buffer);

if (status) {

cout << ”Error: ” << status << endl;

}

re_compile_fastmap(&buffer);

struct re_registers regs;

int ofs = 0;

if (re_search(&buffer,str.c_str(),str.size(),0,str.size(),&regs)!=-1) {

cout << ”Match ”

cout << str.substr(regs.start[0],regs.end[0]-regs.start[0])

cout << ” found starting at: ”

cout << regs.start[0]

cout << ” and ending at ”

cout << regs.end[0]

cout << endl;

} else {

cout << ”Match not found.”

cout << endl;

}

regfree(&buffer);

真实的SRM范例

为了明确起见,下面的例子都是用Java写的。一个C++使用者可以用POSIX或者GNU正则表达式API来构造同Java类似的函数(replace_all, split, matches).

CyberLine (SRM 187 div 1, level 1)

import java.util.*;

public class Cyberline

{

public String lastCyberword(String cyberline)

{

String[]w=cyberline.replaceAll(“-”,”")

.replaceAll(“[^a-zA-Z0-9]“,” ”)

.split(“ ”) ;

return w[w.length-1];

}

}

UnLinker (SRM 203 div 2, level 3)

import java.util.*;

public class UnLinker

{

public String clean(String text)

{

String []m = text.split(“((http://)?www[.]|http://)[a-zA-Z0-9.]+[.](com|org|edu|info|tv)”,-1);

String s = m[0] ;

for (int i = 1 ; i < m.length ; ++i)

s = s + ”OMIT” + i + m[i] ;

return s ;

}

}

CheatCode (SRM 154 div 1, level 1)

import java.util.*;

public class CheatCode {

public int[] matches(String keyPresses, String[] codes) {

boolean []map = new boolean[codes.length] ;

int count = 0 ;

for (int i=0;i<codes.length; ++i)

{

String regex = ”.*” ;

for (int j=0; j<codes[i].length(); ) {

int k = 1;

while ((j+k)<codes[i].length() && codes[i].charAt(j+k)==codes[i].charAt(j)) k++;

regex = regex + codes[i].charAt(j) + ”{“+k+”,}”;

j+=k;

}

regex = regex + ”.*” ;

if (keyPresses.matches(regex))

{

map[i] = true ;

count++ ;

}

}

int []res = new int[count] ;

int j=0;

for (int i= 0 ; i < codes.length; ++i)

if(map[i] == true)

res[j++]=i ;

return res ;

}

}

参考目录

1. The regex(7) linux manual page

2. The regex(3) linux manual page

3. http://docs.freebsd.org/info/regex/regex.info.Programming_with_Regex.html

4. http://www.regular-expressions.info/

5. http://java.sun.com/docs/books/tutorial/extra/regex/

(本文pdf下载地址: http://acm.hust.edu.cn/download/regex.pdf)

[校赛通知]比赛的ID和密码正在发放中,请注意查收

星期五, 十一月 14th, 2008
校赛预赛用的帐号已经开始发放,今晚到讲座的都已经领到.其他的帐号密码也会发到各参赛队的注册的邮箱,请同学们注意查收.

网上注册(也就是通知中的第二步http://acm.hust.edu.cn/acm08)才能拿到比赛的帐号密码,明天大家可以测试帐号,比赛网上注册的截止时间为11.15 11:00a.m.,请还没有注册的尽快注册.

补充:只能用我们发放的帐号进入比赛,自己注册的其他帐号将不能登录比赛.

如有疑问可以发邮件至liruqi@gmail.com.

2008年校赛注册方法

星期六, 十一月 8th, 2008

请所有参赛队员在网站上重新注册参赛信息。

注册方法:
1)首先在本次比赛的注册页面上注册队伍信息。每个队一般3人,容许单人或者两人参赛。
2)在我校OnlineJudge上注册账号,参加网络预赛。注意,上面的队名(Team Name)必须和这里的账号(User ID)保持一致。以便统计结果

请注意 第二步不需要做 但你可以在OnlineJudge上注册帐号进行练习

网络预赛和决赛的账号密码,在赛前统一发放。请参赛队员注意查收邮件或者手机短信息。

email建议使用qq邮箱。gmail可能会将自动发送的电子邮件放入spam中。

我将不定期删除没有队员的空队伍。

华中科技大学第九届大学生科技节ACM程序设计大赛通知

星期二, 十月 21st, 2008

华中科技大学第九届大学生科技节

——ACM程序设计大赛通知

一、活动意义:

为将在国际上具有广泛影响的ACM/ICPC世界大学生程序设计竞赛在校园作进一步推广,培养我校学生的创造力,团队合作精神和创新意识,为我校广大计算机编程爱好者提供一个展示实力和交流的平台,我们在校团委的指导下组织此次比赛。希望让更多的同学参与该项赛事,进一步提高我校学生的计算机编程的兴趣和水平。同时通过全面的宣传和培训,使同学们获得更多的编程知识。并借助本次活动,建设自己的ACM网上答题平台,使广大同学在平时也能通过网上答题提高自己的编程水平,为我校ACM团队培养高质量人才创造机遇。

二、参赛对象:

凡学校在册本科生及二年级以下硕士研究生(含硕士二年级)均可参加(参加过两次ACM区域赛的队员除外)。

三、报名方式:

1.每一参赛队登陆 http://acm.hust.edu.cn/thx/registerpage.php ,注册参赛ID

2.选手下载并填写报名表,注明本队使用的参赛ID。然后发邮件至 hustacmbaoming@yahoo.cn

3.也可在宣传现场、讲座,或直接向组委会联系人提交相同的报名表

四、竞赛方式:

本次比赛以三人组队参赛,小组成员共用一台电脑,预赛和决赛的时间为五小时,试题为英文。所使用的计算机语言为C,C++,JAVA中的任何一种。初赛于1116日通过网络进行。决赛拟定于12月上旬在指定地点进行。

五、活动流程:

第一阶段:宣传与报名

1021-22 通过海报横幅等方式进行第一轮宣传,发放院系通知,并组织进行报名

1025(紫菘公寓),26日(韵苑公寓)举行现场宣传咨询活动

1029700 西九楼502 ACM大赛新闻发布会暨首期培训讲座

大赛将以各种方式在校内宣传。参赛选手通过大赛网站报名。

第二阶段:培训

1029——11月13,举行六期针对比赛的培训。主要讲关于各项实用的算法在比赛中的应用。同时将讲座内容上网供同学们下载。并继续接受报名。

同学的在注册ID之后即可登陆网上答题系统(Online Judge)练习答题。

比赛前期培训(算法讲座)

讲期

讲座时间

讲座地点

第一讲

贪心

1029 700

西九楼502

第二讲

排序与检索

1102 700

待定

第三讲

组合数学

1105 700

待定

第四讲

搜索

1108 700

待定

第五讲

图论

1111 700

待定

第六讲

动态规则

11 13 700

待定

第三阶段:网上预赛

1116进行网上预赛。

第四阶段:决赛

时间127日,具体地点待定。

六、赛事日程安排

1021-22 分时分地进行第一轮宣传,并发放院系通知,组织报名

1025-26 分别在紫菘韵苑进行现场报名,同时散发宣传单.

10月29 将在大学生活动中心513室进行ACM大赛新闻发布会并发放大赛手册.

1029 第二轮宣传启动

1029-11月13 将进行六场相关讲座培训,地点待定

11月16 通过网上竞赛选拔,并启动第三轮宣传.

12 7 ACM决赛 地点待定

12月81221 启动后期宣传

七、奖项设置:

一等奖1名: 奖品,奖金及证书

二等奖2名: 奖品,奖金及证书

三等奖3名: 奖品及证书

优胜奖6名: 奖品及证书

未尽事宜敬请联系本次大赛负责人

彭程 15926213940 61029357 倪昌 13277952856

主办:共青团华中科技大学委员会

承办:电气学院分团委学生会

200810

有向图的强连通分量

星期四, 九月 4th, 2008

有向图的强连通分量在许多题目中都有所应用。以前不理解,现在觉得很强大。

(1) 强连通优化

(2)2-sat问题的判断

(3)传递闭包

(4)与拓扑排序

(5)割边,割点

主要技巧:缩点,把图变为有向无环图,有向无环图上又可以做许多文章

练习题目:

PKU2749

Poj2186: http://acm.pku.edu.cn/JudgeOnline/problem?id=2186

Poj1066: http://acm.hust.edu.cn/thx/problem.php?id=1066

Poj2762http://acm.pku.edu.cn/JudgeOnline/problem?id=2762

Pku2594http://acm.pku.edu.cn/JudgeOnline/problem?id=2594

Nankai17777: http://acm.nankai.edu.cn/p1777.html有一个最好的程序可以参考一下。

Pku3144http://acm.pku.edu.cn/JudgeOnline/problem?id=3114

Pku3660http://acm.pku.edu.cn/JudgeOnline/problem?id=3660(简单)

2-sat

Poj3683http://acm.pku.edu.cn/JudgeOnline/problem?id=3683

Poj3678http://acm.pku.edu.cn/JudgeOnline/problem?id=3678

Poj2723: http://acm.pku.edu.cn/JudgeOnline/problem?id=2723

传递闭包:

Zoj1759zoj10922003

割边,割点:

Zoj1119

参考: 良哥写得,相见恨晚http://hi.baidu.com/sempr/blog/item/5f81b48f5a9f8feef11f364f.html

图论学习参考:http://hi.baidu.com/zfy0701/blog/item/b8332b5c7b2dd545fbf2c052.html

很好的一个blog

图论题目推荐(from the ECUST)

星期三, 九月 3rd, 2008

http://acm.ecust.edu.cn/training/articles/practice_group/graph1.htm

http://acm.ecust.edu.cn/training/articles/practice_group/graph2.htm

最大流题目汇总(我会不断的更新分类)欢迎大家补充!!

星期五, 八月 15th, 2008

最大流题目:

TC

Single Round Match 200 Round 1 – Division I, Level Three

Single Round Match 236 Round 1 – Division I, Level Three

Single Round Match 399 Round 1 – Division I, Level Three

Hoj1024: http://acm.hust.edu.cn/thx/problem.php?id=1024

2003 TCO Semifinal Round 4 – Division I, Level Three

2004 TCCC Championship Round – Division I, Level Three

2005 TCO Sponsor Track Round 3 – Division I, Level One

混合图的欧拉回路

Poj1637: http://acm.pku.edu.cn/JudgeOnline/problem?id=1637

zju1992http://acm.zju.edu.cn/show_problem.php?pid=1992
 
 

求增广边:

Poj3204http://acm.pku.edu.cn/JudgeOnline/problem?id=3204

类似:Hoj1082: http://acm.hust.edu.cn/thx/problem.php?cid=1017&pid=6

项目选择问题:

Poj3469http://acm.pku.edu.cn/JudgeOnline/problem?id=3469

Zoj2930http://acm.zju.edu.cn/show_problem.php?pid=2930

求项目选择项目最多的方案。

建图:

Poj1149http://acm.pku.edu.cn/JudgeOnline/problem?id=1149

Poj3436http://acm.pku.edu.cn/JudgeOnline/problem?id=3436

Poj3281http://acm.pku.edu.cn/JudgeOnline/problem?id=3281

连通度:

点连通度Poj1966: http://acm.pku.edu.cn/JudgeOnline/problem?id=1966

Uva563, http://icpcres.ecs.baylor.edu/onlinejudge/
点不交的路径条数问题,需要拆点

最小割:

Poj2914http://acm.pku.edu.cn/JudgeOnline/problem?id=2914

stoer-Wagner

基本题:

Poj3498http://acm.pku.edu.cn/JudgeOnline/problem?id=3498

枚举:n次最大流。

Poj1087http://acm.pku.edu.cn/JudgeOnline/problem?id=1087

可以用最大流做,也可以用二分图匹配做。

Poj1273http://acm.pku.edu.cn/JudgeOnline/problem?id=1273

Poj1274http://acm.pku.edu.cn/JudgeOnline/problem?id=1274

Poj1325: http://acm.pku.edu.cn/JudgeOnline/problem?id=1325

poj1459http://acm.pku.edu.cn/JudgeOnline/problem?id=1459

 

Poj1797http://acm.pku.edu.cn/JudgeOnline/problem?id=1797

Poj1815http://acm.pku.edu.cn/JudgeOnline/problem?id=1815

poj2112http://acm.pku.edu.cn/JudgeOnline/problem?id=2112

poj2239http://acm.pku.edu.cn/JudgeOnline/problem?id=2239

poj2289: http://acm.pku.edu.cn/JudgeOnline/problem?id=2289

Poj2391http://acm.pku.edu.cn/JudgeOnline/problem?id=2391

Poj2987http://acm.pku.edu.cn/JudgeOnline/problem?id=2987

Poj3308http://acm.pku.edu.cn/JudgeOnline/problem?id=3308

提示:最大权闭包,转化成最大流

Poj3155: http://acm.pku.edu.cn/JudgeOnline/problem?id=3155

SGU 176 http://acm.sgu.ru/problem.php?contest=0&problem=176
容量有上下界的网络流问题,有难度
 
Spoj660http://www.spoj.pl/problems/QUEST4/
Spoj377http://www.spoj.pl/problems/TAXI/
 
UVA 
http://icpcres.ecs.baylor.edu/onlinejudge/
753,
820, 
10122, 
10330, 
10511, 
10735.

参考:http://www.bbs.stu.edu.cn/cgi-bin/bbsgcon?board=ACMICPC&file=G.1084791345.A

后缀数组题目推荐

星期六, 八月 9th, 2008

后缀数组的题目

Uva11475

题目大意 给定一个字符串在字符串的末尾加最少的字符是的该字符串成为回文串。
[这个题目我已经加到OJ上了 题号是1139 这个题目根本不用后缀数组的 而且后缀数组的效率也是不最高的 ——Sempr补充]

 

Pku2774 : 求两个字符串的最长公共子串长度。

Whu1069  求两个字符串的最长公共子串长度。

 

pku3581 http://acm.pku.edu.cn/JudgeOnline/problem?id=3581
题目大意:给定一个数组
{A1, A2, …, An} 满足A1 > A2, …, An,把该数组分成三段,单独翻转,使得数组的字典序最小。

 

http://acm.pku.edu.cn/JudgeOnline/problem?id=3623

题目大意:给定一个字符数组,可以从数组的开头或者结尾取出元素,按取出顺序排成一列,使得他的字典序最小。

 

http://acm.pku.edu.cn/JudgeOnline/problem?id=1743
题目大意:求最长不重叠差为定值子串的长度

-》最长不重叠重复子串的长度

(1)二分答案

2)线性扫描

 

http://acm.pku.edu.cn/JudgeOnline/problem?id=3450

题目大意:求多个字符串的最长公共字串。

http://acm.pku.edu.cn/JudgeOnline/problem?id=3080

题目大意:求多个字符串的最长公共子串(弱)。

用后缀数组比较麻烦,可以枚举答案,用kmp判定。

 

Waterloolife formshttp://acm.pku.edu.cn/JudgeOnline/problem?id=3294

题目大意:超过一半的串的公共最长子串。

http://acm.pku.edu.cn/JudgeOnline/problem?id=3415

题目大意:求两个字符串的长度大于k公共字串的个数。

 

Whu1084 http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1084

题目大意:求最长不重叠重复字串的长度和个数。

 

Toj2171 http://acm.tju.edu.cn/toj/showp2171.html

题目大意:统计每子串可分成可分成多少个重复串


http://acm.pku.edu.cn/JudgeOnline/problem?id=2758
题目大意:给定一个串,要求支持两种操作:插入单个字符或者询问从两个位置开始的最大匹配长度。

 

参考:http://hi.baidu.com/zfy0701/blog/item/f2278a0928991dca3bc763a0.html

http://hi.baidu.com/zfy0701/blog/item/d9fedbd14581113d9b5027ab.html

http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1178