【UVa455】週期串

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int sum[30];
char pas[85];

int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int flag = 1;
        int MAX = 0;
        string s;
        cin >> s;
        int len = s.length();
        pas[0] = s[0];
        int lpas = 1;
        for (int cnt = 1; cnt < len; cnt++)
        {
            if (flag == 3)
            {
                break;
            }

            //flag = 1;

            if (s[cnt] == pas[0])
            {
                int ans = 1;
                /*for (int i = 1; i < lpas; i++)
                {
                    if (s[cnt + i] == pas[i])
                    {
                        ans++;
                    }
                    else
                    {
                        //MAX = max(MAX, ans);
                        break;
                    }
                    /*if (s[cnt + i] != pas[i])
                    {
                        ans = max(ans, lpas);
                        break;
                    }
                }*/

                flag = 1;

                if (len % lpas != 0)
                {
                    flag = 0;
                    pas[lpas] = s[cnt];
                    lpas++;
                    continue;
                }

                for (int j = 1; j < len; j++)
                {
                    if (s[j] != pas[j % lpas])
                    {
                        flag = 0;
                        pas[lpas] = s[cnt];
                        lpas++;
                        break;
                    }
                }

                if (flag == 1) 
                {
                    MAX = max(MAX, lpas);
                    flag = 3;
                    break;
                }   
            }
            else
            {
                pas[lpas] = s[cnt];
                lpas++;
            }
        }

        if (MAX == 0)
        {
            printf("%d\n", len);
        }
        else printf("%d\n", MAX);

        if (T != 0)
        {
            printf("\n");
        }
    }
    return 0;
}

一道水題啊,但是我調了兩節課qnq
一看字符串長度<80我就開始亂搞,結果怎麼搞怎麼出錯,flag都已經插到3了,別問我2去哪了= =
(感覺這道題只有三個測試點,要是多的話可能還會WA)

說有個比較簡單的解法是枚舉長度,看看能不能整除,如果能的話再檢驗,藍而我沒想到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章