第6回日本情報オリンピック 本選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#B - 最長の階段
https://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/2007-ho.pdf#page=3
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #B - 最長の階段 https://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/2007-ho.pdf#page=3 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,k; cin>>n>>k; vector<int> num(k+1); for(int i=0;i<k;i++){ cin>>num[i]; } num[k]=1000000000; sort(num.begin(),num.end()); if(num[0]==0){ int ans=0; for(int i=1;i<k;i++){ int cnt=1; int j=0; for(int l=i;l<k;l++){ if(num[l+1]==num[l]+1){ cnt++; ans=max(ans,cnt); continue; }else if(num[l+1]==num[l]+2 && j<1){ cnt+=2; j++; ans=max(ans,cnt); continue; } break; } } cout<<ans<<endl; }else{ int ans=0; for(int i=0;i<k;i++){ int cnt=1; for(int l=i;l<k;l++){ if(num[l+1]==num[l]+1){ cnt++; ans=max(ans,cnt); }else{ break; } } } cout<<ans<<endl; } return 0; }