解法
二次元累積和を実装していい感じにやる
ソース
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int mas[1001][1001][3];
int main(){
int M, N, K;
string tmp = "JOI";
cin >> M >> N;
cin >> K;
for(int i = 1 ; i <= M ; i++ ){
for(int j = 1 ; j <= N ; j++ ){
char c;
cin >> c;
for(int k = 0 ; k < 3 ; k++ ){
mas[i][j][k] = mas[i-1][j][k] + mas[i][j-1][k] - mas[i-1][j-1][k];
}
mas[i][j][tmp.find(c)]++;
}
}
for(int i = 0 ; i < K ; i++ ){
int a, b, c, d;
cin >> a >> b >> c >> d;
for(int j = 0 ; j < 3 ; j++ ){
cout << (j?" ":"") << mas[c][d][j] + mas[a-1][b-1][j] - mas[a-1][d][j] - mas[c][b-1][j];
}
cout << endl;
}
}
0 件のコメント:
コメントを投稿