アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
・問題 1: X に最も近い値
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例 問題 1: X に最も近い値 https://algo-method.com/tasks/390 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,l,r; cin>>n>>l>>r; vector<pair<int,int>> v; for(int i=l;i<=r;i++){ v.push_back({abs(n-i),i}); } sort(v.begin(),v.end()); cout<<v[0].second<<endl; return 0; }
・問題 2: キャピタリゼーション
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例 問題 2: キャピタリゼーション https://algo-method.com/tasks/391 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; string s; cin>>n>>s; for(int i=0;i<n-1;i++){ string t=s.substr(i,3); if(t=="joi"){ s.replace(i,3,"JOI"); } } cout<<s<<endl; return 0; }
・問題 3: 最長昇順連続部分列
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2019/2020 一次予選 (第 3 回)の解答例 問題 3: 最長昇順連続部分列 https://algo-method.com/tasks/392 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } vector<int> cnt; for(int i=0;i<n;i++){ int x=a[i]; int c=1; for(int j=i+1;j<n;j++){ if(a[j]>=x){ c++; }else{ break; } x=a[j]; } cnt.push_back(c); } sort(cnt.begin(),cnt.end(),greater<int>()); cout<<cnt[0]<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com
またAtCoder Problemsにも同じ問題が公開されています。