結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
Tatsuyaaaa
|
| 提出日時 | 2019-12-15 01:18:37 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,093 ms / 2,000 ms |
| コード長 | 901 bytes |
| コンパイル時間 | 2,305 ms |
| コンパイル使用メモリ | 77,708 KB |
| 実行使用メモリ | 58,768 KB |
| 最終ジャッジ日時 | 2024-11-10 00:39:41 |
| 合計ジャッジ時間 | 12,841 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 14 |
ソースコード
import java.util.*;
public class Main {
static long B = 1_000_000_007L;
static int contain(String a, String b) {
int val = 0;
int al = a.length();
int bl = b.length();
if (al>bl) return val;
long t = 1;
for (int i=0;i<al;i++) t*=B;
long ah = 0;
long bh = 0;
for (int i=0;i<al;i++) ah=ah*B+(int)a.charAt(i);
for (int i=0;i<al;i++) bh=bh*B+(int)b.charAt(i);
for (int i=0;i+al<=bl;i++) {
if (ah==bh) {
val++;
}
if (i+al<bl) bh=bh*B+(int)b.charAt(i+al)-(int)b.charAt(i)*t;
}
return val;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.next();
int M = sc.nextInt();
int ans = 0;
for (int i=0;i<M;i++) {
String C = sc.next();
ans += contain(C, S);
}
System.out.println(ans);
}
}
Tatsuyaaaa