結果
| 問題 | No.1192 半部分列 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-11-27 08:18:34 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 20 ms / 2,000 ms |
| コード長 | 902 bytes |
| コンパイル時間 | 587 ms |
| コンパイル使用メモリ | 67,716 KB |
| 実行使用メモリ | 24,576 KB |
| 最終ジャッジ日時 | 2024-07-23 21:22:53 |
| 合計ジャッジ時間 | 2,389 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 |
コンパイルメッセージ
main.cpp:6:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
6 | main()
| ^~~~
ソースコード
#include<iostream>
using namespace std;
string S,T;
int nS[1<<17][26],nT[1<<17][26];
int L[1<<17];
main()
{
cin>>S>>T;
for(int i=0;i<26;i++)
{
nS[S.size()][i]=S.size();
nT[T.size()][i]=T.size();
}
for(int i=S.size();i--;)
{
for(int j=0;j<26;j++)nS[i][j]=nS[i+1][j];
nS[i][S[i]-'a']=i;
}
for(int i=T.size();i--;)
{
for(int j=0;j<26;j++)nT[i][j]=nT[i+1][j];
nT[i][T[i]-'a']=i;
}
L[S.size()]=T.size();
for(int i=S.size();i--;)
{
int id=L[i+1];
if(id<0)L[i]=-1;
else
{
id--;
while(id>=0&&T[id]!=S[i])id--;
L[i]=id;
}
}
if(L[0]>=0)
{
cout<<-1<<endl;
return 0;
}
int si=0,ti=0;
while(true)
{
for(int i=0;i<26;i++)if(nS[si][i]<S.size())
{
if(nT[ti][i]==T.size())
{
cout<<(char)('a'+i)<<endl;
return 0;
}
if(L[nS[si][i]+1]<nT[ti][i]+1)
{
si=nS[si][i]+1;
ti=nT[ti][i]+1;
cout<<(char)('a'+i);
break;
}
}
}
}