hihocoder-1032

来源:互联网 发布:好用的拼图软件 编辑:程序博客网 时间:2024/04/28 01:04

T了很多次居然卡strlen,strlen是O(n)复杂度的,所以说以后不要经常用了。。。。。。

#include <cstdio>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <cctype>#include <climits>#include <ctime>#include <iostream>#include <algorithm>#include <map>#include <vector>#include <queue>#include <utility>#include <stack>#include <functional>#define _min(x, y) ((x)<(y)?(x):(y))using namespace std;typedef long long lovelive;const int inf = INT_MAX;const double pai = acos(-1.0);const double gold = (sqrt(5.0) - 1.0) / 2.0;char base_arr[1000117], use_arr[2000117];int rec_arr[2000117];int n, len;void init(){    int i, j, k;    memset(base_arr, 0, sizeof(base_arr));    memset(use_arr, 0, sizeof(use_arr));    memset(rec_arr, 0, sizeof(rec_arr));return ;}void input_data(){    int i, j, k;    scanf("%s", base_arr);    j = 0;    len = strlen(base_arr);    use_arr[j] = '#';    for(i = 0; i < strlen(base_arr); ++i)    {        use_arr[j++] = '#';        use_arr[j++] = base_arr[i];//        use_arr[2 * i + 1] = base_arr[i];//        use_arr[2 * i + 2] = '#';    }    use_arr[j] = '#';return ;}void solve(){    int i, j, k;    len = len * 2 + 1;    int id, mx = 0;    for(i = 0; i < len; ++i)    {        if(mx > i)        {            rec_arr[i] = _min(rec_arr[id * 2 - i], rec_arr[id] + id - i);        }        else        {            rec_arr[i] = 1;        }        while(use_arr[i - rec_arr[i]] == use_arr[i + rec_arr[i]] && i - rec_arr[i] >= 0 && i + rec_arr[i] < len)        {            rec_arr[i] += 1;        }        if(rec_arr[i] + i > mx)        {            id = i;            mx = rec_arr[i] + i;        }    }return ;}void output_data(){    int i, j, k;    k = 1;    for(i = 0; i < len; ++i)    {        if(rec_arr[i] > k) k = rec_arr[i];    }    printf("%d\n", k - 1);return ;}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE//    freopen("in.in", "r", stdin);//    freopen("out.out", "w", stdout);#endif // ONLINE_JUDGE    int i, j, k;    while(scanf("%d", &n) != EOF)    {        while(n--)        {            init();            input_data();            solve();            output_data();        }    }return 0;}


0 0
原创粉丝点击