アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2015/2016 予選 (前半)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
・問題 1: 科目選択
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2015/2016 予選 (前半)の解答例 問題 1: 科目選択 https://algo-method.com/tasks/408 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ vector<int> four(4); vector<int> two(2); for(int i=0;i<4;i++){ cin>>four[i]; } for(int i=0;i<2;i++){ cin>>two[i]; } sort(four.rbegin(),four.rend()); sort(two.rbegin(),two.rend()); int n=four[0]+four[1]+four[2]+two[0]; cout<<n<<endl; return 0; }
・問題 2: ゼッケンの交換
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2015/2016 予選 (前半)の解答例 問題 2: ゼッケンの交換 https://algo-method.com/tasks/409 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=1;i<=m;i++){ for(int j=0;j<(int)a.size()-1;j++){ if((a[j]%i)>(a[j+1]%i)){ using std::swap; swap(a[j],a[j+1]); } } } for(int i=0;i<n;i++){ cout<<a[i]<<endl; } return 0; }
・問題 3: ロシアの旗
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2015/2016 予選 (前半)の解答例 問題 3: ロシアの旗 https://algo-method.com/tasks/410 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; vector<int> w(n),b(n),r(n); for(int i=0;i<n;i++){ if(i>=1){ w[i]=w[i-1]; b[i]=b[i-1]; r[i]=r[i-1]; } for(int j=0;j<m;j++){ char c; cin>>c; if(c=='W'){ w[i]++; }else if(c=='B'){ b[i]++; }else{ r[i]++; } } } int ans=100000000; for(int i=0;i<=n-3;i++){ for(int j=i+1;j<=n-2;j++){ ans=min(ans,r[j]+b[i]-b[j]+b[n-1]-w[i]+w[n-1]); } } cout<<ans<<endl; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com
またAtCoder Problemsにも同じ問題が公開されています。