Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Substring"
https://onlinejudge.u-aizu.ac.jp/problems/2444
・部分文字列の種類数は?
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #Volume24 : 2444 - Substring
/* Aizu Online Judge in C++ #Volume24 : 2444 - Substring https://onlinejudge.u-aizu.ac.jp/problems/2444 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll a=1000000007; int main(void){ ll n,m; string s; cin>>n>>m>>s; ll l=0,r=0,v[n+1],p[n+1]; v[0]=p[0]=1; set<ll> st; for(ll i=0;i<n;i++){ v[i+1]=v[i]*a+s[i]; p[i+1]=p[i]*a; } for(ll i=0;i<m;i++){ string q; cin>>q; if(q=="R++"){ r++; }else if(q=="R--"){ r--; }else if(q=="L++"){ l++; }else if(q=="L--"){ l--; } st.insert(v[r+1]-v[l]*p[r-l+1]); } cout<<st.size()<<"\n"; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/