JOI春合宿2015 オンラインジャッジから、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#B - 愉快なロゴデザイン
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #B - 愉快なロゴデザイン https://www.ioi-jp.org/camp/2015/2015-sp-tasks/index.html 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; bool f(char a,char b){ return ((a!=b) && (a!='*')); } int main(void){ ll K; cin>>K; string s; cin>>s; ll n=s.size(); reverse(s.begin(),s.end()); s+=s+s; ll ans=n; ll cnt=0; for(ll i=0,j=1,k=1;i<K;i++,k*=4){ for(ll l=0;l<k;l++){ cnt+=f(s[j+l],'I'); } j+=k; for(ll l=0;l<k;l++){ cnt+=f(s[j+l],'O'); } j+=k; for(ll l=0;l<k;l++){ cnt+=f(s[j+l],'J'); } j+=k; } for(ll l=1;l<n;l++){ for(ll i=0,j=l,k=1;i<K;i++,k*=4){ cnt-=f(s[j],'I'); cnt+=f(s[j+k],'I'); j+=k; cnt-=f(s[j],'O'); cnt+=f(s[j+k],'O'); j+=k; cnt-=f(s[j],'J'); cnt+=f(s[j+k],'J'); j+=k; } ans=min(ans,cnt); } cout<<ans<<endl; return 0; }