アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2016/2017 予選 (前半)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
・問題 1: 電子レンジ
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2016/2017 予選 (前半)の解答例 問題 1: 電子レンジ https://algo-method.com/tasks/403 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int a,b,c,d,e; cin>>a>>b>>c>>d>>e; int ans=0; if(a<0){ ans+=c*abs(a); ans+=d; ans+=b*e; }else if(a==0){ ans+=d; ans+=b*e; }else{ ans+=(b-a)*e; } cout<<ans<<endl; return 0; }
・問題 2: ポイントカード
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2016/2017 予選 (前半)の解答例 問題 2: ポイントカード https://algo-method.com/tasks/404 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; vector<int> a(m),b(m); for(int i=0;i<m;i++){ cin>>a[i]>>b[i]; } sort(a.begin(),a.end(),greater<int>()); int ans=0; for(int i=0;i<m-1;i++){ if(a[i]<n){ ans+=n-a[i]; } } cout<<ans<<endl; return 0; }
・問題 3: 休憩スペース
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2016/2017 予選 (前半)の解答例 問題 3: 休憩スペース https://algo-method.com/tasks/405 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m,d; cin>>n>>m>>d; char s[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>s[i][j]; } } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<m-d+1;j++){ bool tf=false; for(int k=j;k<j+d;k++){ if(s[i][k]=='#'){ tf=true; break; } } if(tf==false){ ans++; } } } for(int i=0;i<n-d+1;i++){ for(int j=0;j<m;j++){ bool tf=false; for(int k=i;k<i+d;k++){ if(s[k][j]=='#'){ tf=true; } } if(tf==false){ ans++; } } } cout<<ans<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com
またAtCoder Problemsにも同じ問題が公開されています。