アルゴ式(beta版)の「日本情報オリンピック (予選) 過去問」JOI 2012/2013 予選 (前半)からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
・問題 1: 宿題
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2012/2013 予選 (前半)の解答例 問題 1: 宿題 https://algo-method.com/tasks/587 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int l,a,b,c,d; cin>>l>>a>>b>>c>>d; int math=(a%c==0 ? a/c : a/c+1); int japanese=(b%d==0 ? b/d : b/d+1); int ans=l-max(math,japanese); cout<<ans<<endl; return 0; }
・問題 2: 数当てゲーム
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2012/2013 予選 (前半)の解答例 問題 2: 数当てゲーム https://algo-method.com/tasks/588 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<vector<int>> vv(n,vector<int>(3)); for(int i=0;i<n;i++){ for(int j=0;j<3;j++){ cin>>vv[i][j]; } } vector<int> score(n,0); for(int j=0;j<3;j++){ for(int i=0;i<n;i++){ bool tf=true; for(int k=i+1;k<n;k++){ if(vv[i][j]==vv[k][j]){ tf=false; break; } } for(int k=0;k<i;k++){ if(vv[i][j]==vv[k][j]){ tf=false; break; } } if(tf){ score[i]+=vv[i][j]; } } } for(int i=0;i<n;i++){ cout<<score[i]<<endl; } return 0; }
・問題 3: 看板
/* C++による「日本情報オリンピック (予選) 過去問」JOI 2012/2013 予選 (前半)の解答例 問題 3: 看板 https://algo-method.com/tasks/589 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; string s; cin>>n>>s; int ss=(int)s.size(); vector<string> vs(n); int cnt=0; for(int i=0;i<n;i++){ cin>>vs[i]; int vss=(int)vs[i].size(); for(int j=0;j<vss;j++){ for(int k=1;k*(ss-1)+j<vss;k++){ for(int l=0;l<ss;l++){ if(vs[i].at(j+l*k)!=s[l]){ goto one; } } cnt++; goto two; one:; } } two:; } cout<<cnt<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com