paizaラーニングのレベルアップ問題集「ハッシュメニュー」からの出典です。
paiza.jp
C++による「ハッシュメニュー」問題集: 座標系での向きの変わる移動と、それらの提出コードの解答例です。
僕が作成、提出したコードは、以下のとおりです。
・STEP: 1 ハッシュ関数とは
/* paizaラーニング: C++による「ハッシュメニュー」問題集: ハッシュ関数を作ってみよう STEP: 1 ハッシュ関数とは https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step0 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,mod; ll H(ll x){ return x%mod; } int main(void){ cin>>n>>mod; for(ll i=0;i<n;i++){ ll x; cin>>x; cout<<H(x)<<endl; } return 0; }
・STEP: 2 やや複雑なハッシュ
/* paizaラーニング: C++による「ハッシュメニュー」問題集: ハッシュ関数を作ってみよう STEP: 2 やや複雑なハッシュ https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step1 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll a,b,mod; ll H(ll x){ return (a*x+b)%mod; } int main(void){ ll n; cin>>n>>a>>b>>mod; for(ll i=0;i<n;i++){ ll x; cin>>x; cout<<H(x)<<endl; } return 0; }
・STEP: 3 文字列のハッシュ
/* paizaラーニング: C++による「ハッシュメニュー」問題集: ハッシュ関数を作ってみよう STEP: 3 文字列のハッシュ https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step2 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; #define all(v) v.begin(),v.end() ll n; ll H(string s){ ll ret=0; ret+=count(all(s),'p'); ret+=count(all(s),'a'); ret+=count(all(s),'i'); ret+=count(all(s),'z'); return ret; } int main(void){ cin>>n; for(ll i=0;i<n;i++){ string s; cin>>s; cout<<H(s)<<endl; } return 0; }
・FINAL問題: ハッシュ関数を作ってみよう
/* paizaラーニング: C++による「ハッシュメニュー」問題集: ハッシュ関数を作ってみよう FINAL問題: ハッシュ関数を作ってみよう https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_boss 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll H(string s){ return s.size()*s.size(); } int main(void){ ll n; cin>>n; for(ll i=0;i<n;i++){ string s; cin>>s; cout<<H(s)<<endl; } return 0; }
paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。