2007年 日本情報オリンピック春合宿OJから、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#anagram - アナグラム (Anagram)
https://atcoder.jp/contests/joisc2007/tasks/joisc2007_anagra
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #anagram - アナグラム (Anagram) https://atcoder.jp/contests/joisc2007/tasks/joisc2007_anagra 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll arr[30]; ll f(string s){ ll r=arr[s.size()]; map<char,ll> m; for(auto &i : s){ m[i]++; } for(auto &i : m){ r/=arr[i.second]; } return r; } int main(void){ string s; cin>>s; ll ans=0; arr[0]=1; for(ll i=1;i<21;i++){ arr[i]=arr[i-1]; arr[i]*=i; } ll n=s.size(); for(ll i=0;i<n;i++){ map<char,bool> m; for(ll j=i;j<n;j++){ if(s[j]<s[i] && !m[s[j]]){ ans+=f(s.substr(i,j-i)+s.substr(j+1,n-j)); m[s[j]]=true; } } } cout<<ans+1<<endl; return 0; }