# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
276980 | Gilgamesh | Bitaro the Brave (JOI19_ho_t1) | Java | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
import java.util.*;
import java.io.*;
public class joi2019ho_t1 {
final static int MOD = 1000000007;
final static int intMax = 1000000000;
final static int intMin = -1000000000;
final static int[] dx = { 0, 0, -1, 1 };
final static int[] dy = { -1, 1, 0, 0 };
static int add(int a, int b) {
return (a + b) % MOD;
}
static int sub(int a, int b) {
return (a - b + MOD) % MOD;
}
static int mult(int a, int b) {
return (int)((((long)(a)) * b) % MOD);
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// BufferedReader br = new BufferedReader(new FileReader(".in"));
PrintWriter out = new PrintWriter(new File(".out"));
StringTokenizer st = new StringTokenizer(br.readLine());
int h = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int grid[][] = new int[h][w];
for(int i = 0; i < h; ++i){
String s = br.readLine();
for(int j = 0; j < w; ++j){
grid[i][j] = s.charAt(j) == 'J' ? 0 : s.charAt(j) == 'O' ? 1 : 2;
}
}
int[][] suffo = new int[h][w];
int[][] suffi = new int[h][w];
for(int i = 0; i < h; ++i){
for(int j = w - 1; j >= 0; --j){
suffo[i][j] = grid[i][j] == 1 ? 1 : 0;
if(j < w - 1) suffo[i][j] += suffo[i][j + 1];
}
}
for(int i = 0; i < w; ++i){
for(int j = h - 1; j >= 0; --j){
suffi[j][i] = grid[j][i] == 2 ? 1 : 0;
if(j < h - 1) suffi[j][i] += suffi[j + 1][i];
}
}
long ans = 0;
for(int i = 0; i < w; ++i){
for(int j = 0; j < h; ++j){
if(grid[i][j] == 0) {
ans += (long) suffo[i][j] * suffi[i][j];
}
}
}
System.out.println(ans);
br.close();
out.close();
}
}