結果
| 問題 |
No.8015 アンチローリングハッシュ
|
| ユーザー |
i_am_nicolen_22
|
| 提出日時 | 2019-08-16 01:37:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 1,250 bytes |
| コンパイル時間 | 1,172 ms |
| コンパイル使用メモリ | 163,656 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-19 15:53:27 |
| 合計ジャッジ時間 | 2,086 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 21 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
using ull = unsigned long long;
vector<ll>rolling_hash_search(string s,string t){
vector<long long >index_list;
ll SL=s.size();
ll TL=t.size();
ull b=1e8+7;
ull a=1;
for (int i = 0; i < TL; i++)
{
a*=b;
}
ull s_hash = 0;
for (int i = 0; i < TL; i++)
{
s_hash=s_hash*b+s[i];
}
ull t_hash=0;
for (int i = 0; i < TL; i++)
{
t_hash=t_hash*b+t[i];
}
for (int i = 0; i < SL-TL+1; i++)
{
if(s_hash==t_hash) index_list.push_back(i);
if(i+TL<SL) s_hash=s_hash*b-s[i]*a+s[i+TL];
}
return index_list;
}
int main(){
int a,b;
cin>>a>>b;
a%=b;
vector<ll>v(b,-1);
ll idx=1;
ll endidx;
ll swidx;
ll copy=a;
v[a]=0;
while(1){
copy*=a;
copy%=b;
if(v[copy]>=0){
endidx=idx;
swidx=v[copy];
break;
}
else{
v[copy]=idx;
}
idx++;
}
string s,t;
for (int i = 0; i <=endidx+1; i++)
{
s.push_back('a');
t.push_back('a');
}
s[endidx-swidx]='b';
t[0]='b';
cout<<s<<endl;
cout<<t<<endl;
}
i_am_nicolen_22