第10回日本情報オリンピック 本選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#A - 惑星探査 (Planetary Exploration)
https://www.ioi-jp.org/joi/2010/2011-ho-tasks_data/2011-ho.pdf#page=2
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #A - 惑星探査 (Planetary Exploration) https://www.ioi-jp.org/joi/2010/2011-ho-tasks_data/2011-ho.pdf#page=2 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int m,n,k; cin>>m>>n>>k; vector<string> joi(n); vector<vector<int>> vj(m+1,vector<int>(n+1,0)); vector<vector<int>> vo(m+1,vector<int>(n+1,0)); vector<vector<int>> vi(m+1,vector<int>(n+1,0)); for(int i=0;i<m;i++){ cin>>joi[i]; for(int j=0;j<n;j++){ vj[i+1][j+1]=vj[i+1][j]+vj[i][j+1]-vj[i][j]; vo[i+1][j+1]=vo[i+1][j]+vo[i][j+1]-vo[i][j]; vi[i+1][j+1]=vi[i+1][j]+vi[i][j+1]-vi[i][j]; if(joi[i].at(j)=='J'){ vj[i+1][j+1]++; } if(joi[i].at(j)=='O'){ vo[i+1][j+1]++; } if(joi[i].at(j)=='I'){ vi[i+1][j+1]++; } } } for(int i=0;i<k;i++){ int a,b,c,d; cin>>a>>b>>c>>d; int aj=vj[c][d]-vj[c][b-1]-vj[a-1][d]+vj[a-1][b-1]; int ao=vo[c][d]-vo[c][b-1]-vo[a-1][d]+vo[a-1][b-1]; int ai=vi[c][d]-vi[c][b-1]-vi[a-1][d]+vi[a-1][b-1]; cout<<aj<<" "<<ao<<" "<<ai<<endl; } return 0; }