JOI 2010-2011 日本代表選手選考会 (春合宿代替措置) 過去問から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#ioi - 国際情報オリンピック (IOI)
https://www.ioi-jp.org/camp/2011/2011-sp-tasks/2011-sp-day4.pdf
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #ioi - 国際情報オリンピック (IOI) https://www.ioi-jp.org/camp/2011/2011-sp-tasks/2011-sp-day4.pdf 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int k,n,m; pair<int,int> p[100000]; vector<int> cer,may; void output(void){ sort(cer.begin(),cer.end()); sort(may.begin(),may.end()); for(int i=0;i<cer.size();i++){ cout<<cer[i]+1<<endl; } cout<<"--------"<<endl; for(int i=0;i<may.size();i++){ cout<<may[i]+1<<endl; } } int main(void){ cin>>k>>n>>m; for(int i=0;i<k;i++){ cin>>p[i].first; p[i].second=i; } sort(p,p+k); if(n==m){ int num=p[k-(k+11)/12].first; for(int i=0;i<k;i++){ if(p[i].first>=num){ cer.push_back(p[i].second); may.push_back(p[i].second); } } output(); return 0; } for(int i=0;i<k;i++){ int score=p[i].first-100*(n-m); int it=upper_bound(p,p+k,pair<int,int>(score,k))-p; int num=k-it-1; if(num*12<k){ cer.push_back(p[i].second); } score=p[i].first+100*(n-m); it=upper_bound(p,p+k,pair<int,int>(score,k))-p; num=k-it; if(num*12<k){ may.push_back(p[i].second); } } output(); }