アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2017/2018 予選 (前半)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
・問題 1: 鉛筆
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2017/2018 予選 (前半)の解答例 問題 1: 鉛筆 https://algo-method.com/tasks/400 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,a,b,c,d; cin>>n>>a>>b>>c>>d; int x=0,y=0; int n2=n,n3=n; while(n2>0){ n2-=a; x+=b; } while(n3>0){ n3-=c; y+=d; } cout<<min(x,y)<<endl; return 0; }
・問題 2: 双六
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2017/2018 予選 (前半)の解答例 問題 2: 双六 https://algo-method.com/tasks/401 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int oc=1,ans=1; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; if(a[i]==1){ oc++; }else{ oc=1; } ans=max(ans,oc); } cout<<ans<<endl; return 0; }
・問題 3: 幹線道路
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2017/2018 予選 (前半)の解答例 問題 3: 幹線道路 https://algo-method.com/tasks/402 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int h,w; cin>>h>>w; vector<vector<int>> a(h,vector<int>(w)); for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ cin>>a[i][j]; } } int ans=100000000; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ int sum=0; for(int k=0;k<h;k++){ for(int l=0;l<w;l++){ sum+=a[k][l]*min(abs(i-k),abs(j-l)); } } ans=min(ans,sum); } } cout<<ans<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com
またAtCoder Problemsにも同じ問題が公開されています。