摘要: 题意:给出一个字符串,要从头、尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分。头、尾的串即为整个字符串的前缀和后缀。问这个相同的子串的最大长度是多少。分析:利用KMP算法中的next数组。next数组有一个性质,如果next[b]指向a。a#include using namespace std;#define MAX_SONG_LEN 1000005char song[MAX_SONG_LEN];int left_link[MAX_SONG_LEN];int song_len;void input(){ scanf("%s", (song + 1)); 阅读全文
posted @ 2013-09-28 17:15 金海峰 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k]。谁先>=N,谁输。问最后是第一个人赢还是第二个人赢。分析:必胜策略是这样的,想方设法抢到N-1,这样下一个人必然会>=N。第一个人抢到N-1的方法,就是先说一个数字与N-1的差是k+1的整数倍。因为在这之后另一个人无论说几,第一个人只要把数字补齐到与N-1差k+1的整数倍即可。例如另一个人让数字增加a,那么第一个人则让数字增加k+1-a。这样就必然可以抢到N-1。也有一种情况是第一个采取这种策略,如果N-1本来就是k+1的倍数,那么 阅读全文
posted @ 2013-09-28 17:02 金海峰 阅读(546) 评论(0) 推荐(0) 编辑