UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#206121#3169. 密码tanghexuan100943ms68400kbC++113.8kb2024-07-20 19:57:152024-07-20 20:29:51

answer

#include <bits/stdc++.h>
using namespace std;

static auto __fast_io = []()
{
    ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    return 0;
}();

#define DEBUGx
#ifdef DEBUGx
#define TRC_PG(fmt, args...) fprintf(stderr, "\033[1;32m  TRC_PG(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ##args)
#define TRC_PR(fmt, args...) fprintf(stderr, "\033[1;31m  TRC_PR(%s:%d):\t\033[0m" fmt, __func__, __LINE__, ##args)
#define debug fprintf(stderr, "Passing [%s] in LINE %d\t\n", __func__, __LINE__)
#endif
#ifndef DEBUGx
#define TRC_PG(...)
#define TRC_PR(...)
#define debug
#endif

const int MAX_N = 1e6 + 10;

const long long MOD1 = 577777777;
const long long BASE1 = 131;

bool flag;
set<int> st;
long long base1[MAX_N];
long long hash1[MAX_N];
long long t;
int n;
string s;
vector<int> pi;

vector<int> prefix(string s)
{
    vector<int> pi(s.size(), 0);
    for (int i = 1; i < s.size(); i++)
    {
        int j = pi[i - 1];
        while (j > 0 && s[i] != s[j])
            j = pi[j - 1];
        if (s[i] == s[j])
            j++;
        pi[i] = j;
    }
    return pi;
}

void input()
{
    cin >> s;
    n = s.size();
    pi = prefix(s);
}

long long getHash1(int l, int r)
{
    if (l > r)
        return 0;
    return (hash1[r] - hash1[l - 1] * base1[r - l + 1] % MOD1 + MOD1) % MOD1;
}

void work()
{
    flag = false;
    s = "#" + s;
    base1[0] = 1;
    for (int i = 1; i < MAX_N; i++)
    {
        base1[i] = (base1[i - 1] * BASE1) % MOD1;
    }
    for (int i = 1; i <= n; i++)
    {
        hash1[i] = (hash1[i - 1] * BASE1 + s[i]) % MOD1;
    }
    for (int i = 1; i + 1 < pi.size(); i++)
    {
        if (pi[i])
            st.insert(pi[i]);
    }
    for (t = n - 2; t >= 1; t--)
    {
        if (getHash1(1, t) != getHash1(n - t + 1, n))
            continue;
        if (st.find(t) != st.end())
        {
            flag = true;
            for (int i = 1; i <= t; i++)
                cout << s[i];
            cout << "\n";
            return;
        }
    }
}

void output()
{
    if (!flag)
    {
        cout << "-1\n";
    }
}

namespace work2
{
    const int MAX_N = 1e6 + 10;

    const long long MOD1 = 577777777;
    const long long BASE1 = 131;

    bool flag = false;
    set<long long> st;
    long long base1[MAX_N] = {0};
    long long hash1[MAX_N] = {0};
    long long t = 0;

    void input()
    {
        n = s.size();
        s = "#" + s;
    }

    long long getHash1(int l, int r)
    {
        if (l > r)
            return 0;
        return (hash1[r] - hash1[l - 1] * base1[r - l + 1] % MOD1 + MOD1) % MOD1;
    }

    void work()
    {
        flag = false;
        base1[0] = 1;
        for (int i = 1; i < MAX_N; i++)
        {
            base1[i] = (base1[i - 1] * BASE1) % MOD1;
        }
        for (int i = 1; i <= n; i++)
        {
            hash1[i] = (hash1[i - 1] * BASE1 + s[i]) % MOD1;
        }

        for (t = n - 2; t >= 1; t--)
        {
            if (getHash1(1, t) != getHash1(n - t + 1, n))
                continue;
            st.clear();
            for (int i = 2; i + t - 1 < n; i++)
            {
                st.insert(getHash1(i, i + t - 1));
            }
            if (st.find(getHash1(1, t)) != st.end())
            {
                flag = true;
                for (int i = 1; i <= t; i++)
                    cout << s[i];
                cout << "\n";
                return;
            }
        }
    }

    void output()
    {
        if (!flag)
            cout << -1 << "\n";
    }
}

int main()
{
    input();
    if (n <= 1e3)
    {
        work2::input();
        work2::work();
        work2::output();
    }
    else
    {
        work();
        output();
    }
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 7ms
memory: 9044kb

input:

aaaaaaabbbabbbbabbabaaaaaabbaabbaaaaaaaaaabbbabbbbabbabaaaaaabbaabbaaaaaaaaaabbbabbbbabbabaaaaaabbaa

output:

aaaaaaabbbabbbbabbabaaaaaabbaa

result:

ok single line: 'aaaaaaabbbabbbbabbabaaaaaabbaa'

Test #2:

score: 10
Accepted
time: 5ms
memory: 9044kb

input:

aababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaaba

output:

aababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaababaaaba

result:

ok single line: 'aababaaababaaababaaababaaababa...abaaababaaababaaababaaababaaaba'

Test #3:

score: 10
Accepted
time: 7ms
memory: 9056kb

input:

yhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhgg...

output:

yhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhggbzbxmpjummidyhgg...

result:

ok single line: 'yhggbzbxmpjummidyhggbzbxmpjumm...pjummidyhggbzbxmpjummidyhggbzbx'

Test #4:

score: 10
Accepted
time: 4ms
memory: 9096kb

input:

prvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfc...

output:

prvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfcyjyeprvokxwfc...

result:

ok single line: 'prvokxwfcyjyeprvokxwfcyjyeprvo...fcyjyeprvokxwfcyjyeprvokxwfcyjy'

Test #5:

score: 10
Accepted
time: 5ms
memory: 9096kb

input:

kbnoefznwkhnwgqynrxdgdqjyijlhjyiamdcympayyezqrpsaxgoxtdfwnxurbuowqcyhlqzjgghqcpvbhoydegeefqcpmohqpep...

output:

kbnoefznwkhnwgqynrxdgdqjyijlhjyiamdcympayyezqrpsaxgoxtdfwnxurbuowqcyhlqzjgghqcpvbhoydegeefqcpmohqpep...

result:

ok single line: 'kbnoefznwkhnwgqynrxdgdqjyijlhj...ntpjpztjkkfqtcijbvnytdhyeqikcfq'

Test #6:

score: 10
Accepted
time: 391ms
memory: 68400kb

input:

crwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkd...

output:

crwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkdcsiccrwffzvkd...

result:

ok single line: 'crwffzvkdcsiccrwffzvkdcsiccrwf...csiccrwffzvkdcsiccrwffzvkdcsicc'

Test #7:

score: 10
Accepted
time: 215ms
memory: 33284kb

input:

yxwsxywxkrzlqsiwdspucezlkgshfzctbpyildxbwnmlkecqqotojgxbemfzodkrcushnizzugwuaojfqblyhlfbpqwactpcdgur...

output:

yxwsxywxkrzlqsiwdspucezlkgshfzctbpyildxbwnmlkecqqotojgxbemfzodkrcushnizzugwuaojfqblyhlfbpqwactpcdgur...

result:

ok single line: 'yxwsxywxkrzlqsiwdspucezlkgshfz...rzlqsiwdspucezlkgshfzctbpyildxb'

Test #8:

score: 10
Accepted
time: 130ms
memory: 30648kb

input:

bnlwrkorxmhhlvcpacuxjzeuuggrobdywjzqaafaamhoqebzupzyqwfcmanbuocdodaooxxuukbqevlidlspvlquwcabsylqiadv...

output:

bnlwrkorxmhhlvcpacuxjzeuuggrobdywjzqaafaamhoqebzupzyqwfcmanbuocdodaooxxuukbqevlidlspvlquwcabsylqiadv...

result:

ok single line: 'bnlwrkorxmhhlvcpacuxjzeuuggrob...mhhlvcpacuxjzeuuggrobdywjzqaafa'

Test #9:

score: 10
Accepted
time: 48ms
memory: 21668kb

input:

sqomhzwerrhbmqvtukrgmkxrbgfrwdsrrkqwwxugmhzfgkjtzgpzaqbtworlitprwutprgamridxmnrzjkwnvlotnkscgqcbsnjs...

output:

-1

result:

ok single line: '-1'

Test #10:

score: 10
Accepted
time: 131ms
memory: 30908kb

input:

qtkmtpbygecktzwbjnfhkixcaikrrbwrblidemsjdvojwnctrlkvcvuvdppudyjlstpulczgiofeuuypedxsktxhpzofouwrzfjj...

output:

qtkmtpbygecktzwbjnfhkixcaikrrbwrblidemsjdvojwnctrlkvcvuvdppudyjlstpulczgiofeuuypedxsktxhpzofouwrzfjj...

result:

ok single line: 'qtkmtpbygecktzwbjnfhkixcaikrrb...crqfygiiennmbvsutqtfgvvrwlocprl'

Extra Test:

score: 0
Extra Test Passed