제출 #147211

#제출 시각아이디문제언어결과실행 시간메모리
147211joulejBitaro the Brave (JOI19_ho_t1)C++17
100 / 100
488 ms88700 KiB
#include <iostream>
#include <string>
#include <cassert>

using std::cin;
using std::cout;
using std::string;

using int64 = long long int;

const int MAX_N = 3007;

char table[MAX_N][MAX_N];
int row[MAX_N][MAX_N], col[MAX_N][MAX_N];
int H, W;
int64 answ = 0;

void fast_io()
{
	std::ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
}

void solve()
{
	cin >> H >> W;

	for(int i = 0; i < H; ++i)
	{
		string cur;
		cin >> cur;

		for(int j = 0; j < W; ++j)
			table[i][j] = cur[j];
	}

	for(int i = 0; i < H; ++i)
	{
		for(int j = 0; j < W; ++j)
			row[i][j] = (table[i][j] == 'O');

		for(int j = W - 2; j >= 0; --j)
			row[i][j] += row[i][j + 1];
	}

	for(int j = 0; j < W; ++j)
	{
		for(int i = 0; i < H; ++i)
			col[i][j] = (table[i][j] == 'I');

		for(int i = H - 2; i >= 0; --i)
			col[i][j] += col[i + 1][j];
	}

	for(int i = 0; i < H; ++i)
	{
		for(int j = 0; j < W; ++j)
		{
			if(table[i][j] == 'J')
				answ += ((int64)row[i][j]) * ((int64)col[i][j]);
		}		
	}

	cout << answ << "\n";
}

int main()
{
	fast_io();
	solve();

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...