| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 173646 | Pajaraja | 회문 (APIO14_palindrome) | C++17 | 1090 ms | 908 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define MAXN 300007
using namespace std;
struct node {int nxt[26],l,suf; long long br;};
node tree[MAXN];
int br=2,suff=2;
long long res=0;
string s;
void add(int x)
{
int cur=suff,curl=0;
int ch=s[x]-'a';
while(true)
{
curl=tree[cur].l;
if(x-curl-1>=0 && s[x-curl-1]==s[x]) break;
cur=tree[cur].suf;
}
if(tree[cur].nxt[ch])
{
suff = tree[cur].nxt[ch];
tree[suff].br++;
return;
}
br++;
suff=br;
tree[br].l=tree[cur].l+2;
tree[cur].nxt[ch]=br;
tree[br].br=1;
for(int i=0;i<26;i++) tree[br].nxt[i]=0;
while(true)
{
cur=tree[cur].suf;
curl=tree[cur].l;
if(x-curl-1>=0 && s[x-curl-1]==s[x]) break;
}
tree[br].suf=tree[cur].nxt[ch];
}
int main()
{
int n;
cin>>s; n=s.size();
tree[1].l=-1; tree[1].suf=1; for(int i=0;i<26;i++) tree[1].nxt[i]=0;
tree[2].l=0; tree[2].suf=1; for(int i=0;i<26;i++) tree[2].nxt[i]=0;
for(int i=0;i<s.size();i++) add(i);
for(int i=br;i>0;i--)
{
res=max(res,tree[i].br*tree[i].l);
tree[tree[i].suf].br+=tree[i].br;
}
cout<<res;
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
