結果

問題 No.430 文字列検索
ユーザー ikd
提出日時 2016-10-03 10:43:03
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
RE  
実行時間 -
コード長 729 bytes
コンパイル時間 488 ms
コンパイル使用メモリ 59,568 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-11-10 00:08:27
合計ジャッジ時間 19,376 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 RE * 1
other AC * 13 RE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
using namespace std;

#define int long long

int powpow(int a, int b){
	
	int ret=1;
	for(int i=0; i<b; i++){
		ret*=a;
	}
	
	return ret;
}

int calc(string t){
	
	int ret=0;
	for(int i=0; i<t.size(); i++){
			ret+=(t[i]-'A')*powpow(26, i);
	}
	
	return ret;
}

signed main() {
	
	string S;
	cin>> S;
	int M;
	cin>> M;
	string C[M];
	for(int i=0; i<M; i++) cin>> C[i];
	
	int ans=0;
	for(int k=0; k<M; k++){
		int key=calc(C[k]);
		int keylen=C[k].size();
		int text=calc(S.substr(0, keylen));
		for(int i=0; i<=S.size()-keylen; i++){
			if(key==text) ans++;
			text-=S[i]-'A';
			text/=26;
			text+=(S[i+keylen]-'A')*powpow(26, keylen-1);
		}
		//if(key==text) ans++;
	}
	
	cout<< ans<< endl;
	
	return 0; 
}
0