CF B. Kolya and Tandem Repeat

来源:互联网 发布:淘宝客服模块代码 编辑:程序博客网 时间:2024/06/05 14:56
Kolya got string s for his birthday, the string consists of small English letters. He immediately added k more characters to the right of the string.

Then Borya came and said that the new string contained a tandem repeat of length l as a substring. How large could l be?

See notes for definition of a tandem repeat.
Input

The first line contains s (1 ≤ |s| ≤ 200). This string contains only small English letters. The second line contains number k (1 ≤ k ≤ 200) — the number of the added characters.
Output

Print a single number — the maximum length of the tandem repeat that could have occurred in the new string.
Sample test(s)
Input

aaba
2

Output

6

Input

aaabbbb
2

Output

6

Input

abracadabra
10

Output

20


Note


A tandem repeat of length 2n is string s, where for any position i (1 ≤ i ≤ n) the following condition fulfills: si = si + n.

In the first sample Kolya could obtain a string aabaab, in the second — aaabbbbbb, in the third — abracadabrabracadabra.

暴力枚举所有情况

#include <cstdio>#include <iostream>#include <cstring>using namespace std;char str[205];int main(){    int n;    while(cin>>str>>n){        int len = strlen(str);        int L = len+n-(len+n)%2; //保证长度为偶数        if(len <= n){           cout<<L<<endl;           continue;        }        int maxlen = 0;        for(int i=0; i<len; i++){ //枚举起始位置            for(int j=1; i+j-1<=len-1; j++){ //枚举一半的长度                int cnt = 0;            for(int k=i; k<=i+j-1; k++){ //判断                if(len <= k+j && k+j < len+n) cnt++; //下标                else if(str[k] == str[k+j]) cnt++;            }            if(cnt == j && 2*cnt > maxlen)                maxlen = 2*cnt;            }        }        cout<<maxlen<<endl;    }    return 0;}


0 0
原创粉丝点击