Submission #689627

#TimeUsernameProblemLanguageResultExecution timeMemory
689627WarinchaiBitaro the Brave (JOI19_ho_t1)C++14
100 / 100
337 ms121516 KiB
#include<bits/stdc++.h>
using namespace std;
int sumi[3005][3005];
int sumo[3005][3005];
int main(){
	int h,w;
	cin>>h>>w;
	string ar[h+5];
	queue<pair<int,int> >q;
	for(int i=0;i<h;i++){
		cin>>ar[i];
		for(int j=0;j<w;j++){
			if(ar[i][j]=='J'){
				q.push({i,j});
			}
		}
	}
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			if(ar[i][j]=='O'){
				sumo[i][j]++;
			}else if(ar[i][j]=='I'){
				sumi[i][j]++;
			}
			if(i!=0){
				sumi[i][j]+=sumi[i-1][j];
			}
			if(j!=0){
				sumo[i][j]+=sumo[i][j-1];
			}
		}
	}
	long long ans=0;
	while(!q.empty()){
		int x=q.front().first;
		int y=q.front().second;
		q.pop();
		int nx=0,ny=0;
		if(x==0){
			nx=sumi[h-1][y];
		}else{
			nx=sumi[h-1][y]-sumi[x-1][y];
		}
		if(y==0){
			ny=sumo[x][w-1];
		}else{
			ny=sumo[x][w-1]-sumo[x][y-1];
		}
		ans+=nx*ny;
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...