結果

問題 No.440 2次元チワワ問題
ユーザー 👑 maspymaspy
提出日時 2020-04-08 18:42:31
言語 Python3
(3.8.3 + numpy 1.14.5 + scipy 1.1.0)
結果
TLE   .
実行時間 -
コード長 1,229 Byte
コンパイル時間 46 ms
使用メモリ 467,508 KB
最終ジャッジ日時 2020-06-29 18:44:39

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
testcase_00 AC 140 ms
29,888 KB
testcase_01 AC 139 ms
20,948 KB
testcase_02 AC 145 ms
20,956 KB
testcase_03 AC 142 ms
20,944 KB
testcase_04 AC 197 ms
22,172 KB
testcase_05 AC 166 ms
21,368 KB
testcase_06 AC 143 ms
21,008 KB
testcase_07 AC 2,206 ms
92,488 KB
testcase_08 AC 2,454 ms
122,236 KB
testcase_09 TLE -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #
#!/usr/bin/ python3.8
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
import numpy as np

H, W = map(int, readline().split())
C = np.empty((H, W), np.bool)
for i in range(H):
    C[i] = np.frombuffer(readline().rstrip(), 'S1') == b'c'

Q = int(readline())
ABCD = np.array(read().split(), np.int64) - 1
X1 = ABCD[::4]
Y1 = ABCD[1::4]
X2 = ABCD[2::4]
Y2 = ABCD[3::4]


def solve_1d(C):
    N = len(C)
    W = np.zeros((N + 1, N), np.int64)
    for n in range(1, N + 1):
        W[n, :-1] = W[n - 1, 1:]
        W[n, : N - n + 1] += (C[: N - n + 1] == 0)
    WW = W * (W - 1) // 2
    CWW = WW * C
    for n in range(1, N + 1):
        CWW[n, :-1] += CWW[n - 1, 1:]
    return CWW


def solve(C, X1, X2, Y1, Y2):
    H, W = C.shape
    CWW = np.empty((H, W + 1, W), np.int64)
    for h in range(H):
        CWW[h] = solve_1d(C[h])
    for x1, x2, y1, y2 in zip(X1, X2, Y1, Y2):
        yield CWW[x1:x2 + 1, y2 - y1 + 1, y1].sum()


answer = np.zeros(Q, np.int64)
for _ in range(4):
    H, W = C.shape
    C = C[::-1].T
    X1, Y1, X2, Y2 = Y1, H - 1 - X2, Y2, H - 1 - X1
    answer += np.array(list(solve(C, X1, X2, Y1, Y2)))

print('\n'.join(answer.astype(str)))
0