結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
btk
|
| 提出日時 | 2016-10-02 23:02:11 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 40 ms / 2,000 ms |
| コード長 | 1,112 bytes |
| コンパイル時間 | 1,645 ms |
| コンパイル使用メモリ | 170,384 KB |
| 実行使用メモリ | 60,884 KB |
| 最終ジャッジ日時 | 2024-11-10 00:02:54 |
| 合計ジャッジ時間 | 2,240 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 14 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}init;
typedef long long LL;
struct node{
LL cnt;
int nxt[26];
node(){
cnt=0;
for(int i=0;i<26;i++)nxt[i]=-1;
}
};
int main(){
int N,M;
string S;cin>>S>>M;
N=S.size();
vector<node> trie;trie.push_back(node());
for(int i=0;i<N;i++){
int now=0;
for(int j=0;j<10&&i+j<N;j++){
int c=S[i+j]-'A';
if(trie[now].nxt[c]==-1){
trie.push_back(node());
trie[now].nxt[c]=trie.size()-1;
}
now=trie[now].nxt[c];
trie[now].cnt++;
}
}
LL res=0;
for(int i=0;i<M;i++){
string C;cin>>C;
int k=C.size();
int now=0;
for(int j=0;j<k;j++){
int c=C[j]-'A';
if(trie[now].nxt[c]==-1)break;
now=trie[now].nxt[c];
if(j==k-1){
res+=trie[now].cnt;
// cout<<trie[now].cnt<<endl;
}
}
}
cout<<res<<endl;
return 0;
}
btk