ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#206121 | #3169. 密码 | tanghexuan | 100 | 943ms | 68400kb | C++11 | 3.8kb | 2024-07-20 19:57:15 | 2024-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