Submission #66779110


Source Code Expand

Copy
/*
T = 1
def init():
global T
T = _I()
def solve():
H,W = _M()
G = [_S() for i in _R(H)]
acc = [[0]*(W+1) for i in _R(H+1)]
for i in _R(H):
for j in _R(W):
val = 1 if G[i][j] == '#' else -1
acc[i+1][j+1] = acc[i+1][j] + acc[i][j+1] - acc[i][j] + val
def getsum(x1, y1, x2, y2):
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/* このコードから変換
T = 1

def init():
    global T
    T = _I()



def solve():
    H,W = _M()
    G = [_S() for i in _R(H)]

    acc = [[0]*(W+1) for i in _R(H+1)]

    for i in _R(H):
        for j in _R(W):
            val = 1 if G[i][j] == '#' else -1
            acc[i+1][j+1] = acc[i+1][j] + acc[i][j+1] - acc[i][j] + val

    def getsum(x1, y1, x2, y2):
        return acc[x2][y2] - acc[x1][y2] - acc[x2][y1] + acc[x1][y1]

    ans = 0
    if W > H:
        for top in _R(H):
            for bottom in range(top + 1, H + 1):
                cnt = dd(int)
                cnt[0] = 1
                cur = 0
                for col in range(1, W + 1):
                    v = getsum(top, col - 1, bottom, col)
                    cur += v
                    ans += cnt[cur]
                    cnt[cur] += 1
    else:
        for l in _R(W):
            for r in range(l + 1, W + 1):
                d = dd(int)
                d[0] = 1
                cur = 0
                for i in _R(H):
                    s = getsum(0, l, i + 1, r)
                    cur = s
                    ans += d[cur]
                    d[cur] += 1
    _P(ans)
    
#--------------ごっつりしていってね--------------
#あぁそうそう ごちうさ楽しみ

import sys
import math
from copy import deepcopy as dc
sys.setrecursionlimit(10 ** 6)
from collections import defaultdict as dd
import heapq
from itertools import permutations as per
_S = input;_R = range;_P = print; _E = enumerate;
def _RR(a): return range(a-1,-1,-1)
def _I(): return int(_S())
def _M(): return map(int, _S().split())
def _SS(): return _S().strip().split()
def _L(): return list(_M())
def _LS(): return list(_S())
def _T(): return tuple(_M())
def yn(b): print("Yes" if b else "No")
def fs(b): print("First" if b else "Second")
def lis(c,*a):
    if not len(a): return 0 if c == 0 else []
    if c == 0: return a[0]
    return [lis(c-1,*a[1:]) for i in _R(a[0])]
def in2(a,fn):
    for i in _R(len(a)): a[i]=fn()
biga = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";smaa = "abcdefghijklmnopqrstuvwxyz"
ctoi = lambda c: ord(c) - ord('a')
ctoi2 = lambda c: ord(c) - ord('A')
itoc = lambda i: chr(ord('a') + i)
itoc2 = lambda i: chr(ord('A') + i)
inf = 10 ** 18
mod = 998244353
def around(x,y,type_=False):
    rt = []
    rt.extend([(x+1,y),(x-1,y),(x,y+1),(x,y-1)])
    if type_:
        rt.extend([(x+1,y+1),(x-1,y-1),(x-1,y+1),(x+1,y-1)])
    return rt
def acc(a):
    b = [0]
    for i in a:
        b.append(b[-1] + i)
    return b
class heap:
    l = []
    def __init__(self,*s): self.l = list(s);heapq.heapify(self.l)
    def min(self): return False if (len(self.l) == 0) else self.l[0]
    def pop(self): return False if (len(self.l) == 0) else heapq.heappop(self.l)
    def push(self,n): heapq.heappush(self.l,n)
    def dump(self): return heapq.nsmallest(len(self.l),self.l)
    def max(self): return False if (len(self.l) == 0) else heapq.nlargest(1,self.l)[0]
    def len(self): return len(self.l)
class base:
    bn = 0; dig = 0; num = []
    def __init__(self,base_num,digit = 0):
        self.bn = base_num; self.dig = digit; self.num = [0]*digit
    def max(self): return(self.bn**self.dig-1)
    def dump(self): return(self.num[::-1])
    def ncp(self,digit,n): self.num[digit] = min(self.num[digit]+n,self.bn-1)
    def plus(self,digit,n):
        for i in _R(digit-self.dig+1): self.num.append(0)
        self.dig = max(self.dig,digit+1)
        if (self.num[digit]+n >= self.bn):
            self.plus(digit+1,(self.num[digit]+n)//self.bn)
        self.num[digit] = (self.num[digit]+n)%self.bn
    def copy(self,n):
        self.num = dc(n)
        dig = len(self.num)
    def change(self,n):
        digit = int(math.log(n,self.bn))if n!=0 else 0+1
        for i in _R(digit-self.dig+1): self.num.append(0)
        self.dig = max(self.dig,digit+1)
        for i in _R(self.dig):
            self.num[i] = n%self.bn**(i+1)//self.bn**i
            n -= self.num[i]
        return self.dump()
    def b10(self): return(sum([self.num[i]*self.bn**i for i in _R(self.dig)]))
def gin(N, M=None):
    g = [[] for _ in range(N)]
    for _ in range(N-1 if M is None else M):
        u, v = map(int, input().split());u -= 1;v -= 1
        g[u].append(v);g[v].append(u)
    return g
def ginh(N, M):
    g = [[] for _ in range(N)]
    for i in range(M):
        u, v, h = map(int, input().split());u -= 1;v -= 1
        g[u].append((v,h));#g[v].append((u,h))
    return g
from atcoder.segtree import SegTree
class rhash:
    hs = None
    def __init__(self,S,N):
        self.hs = SegTree(msum,0,[ctoi(S[i])*pow(31,i,mod) for i in _R(N)])
    def get(self,l,r):
        return self.hs.prod(l,r+1)*pow(pow(31,l,mod),mod-2,mod)%mod
    def getall(self):
        return self.hs.all_prod()
    def change(self,n,c):
        self.hs.set(n,ctoi(c)*pow(31,n,mod))
def nwse(s,x,y,rev=False):
    if (rev):
        s = {"N":"S","S":"N","W":"E","E":"W"}[s]
    if s=="N": return (x-1,y)
    elif s=="W": return (x,y-1)
    elif s=="S": return (x+1,y)
    elif s=="E": return (x,y+1)

init()
for i in _R(T):
    solve()

*/
#include <bits/stdc++.h>
using namespace std;

int T = 1;

void init() {

    cin >> T;
}

int getsum(const vector<vector<int>>& acc, int x1, int y1, int x2, int y2) {
    return acc[x2][y2] - acc[x1][y2] - acc[x2][y1] + acc[x1][y1];
}

void solve() {
    int H, W;
    cin >> H >> W;
    vector<string> G(H);
    for (int i = 0; i < H; ++i) cin >> G[i];

    // 2D累積和 (1-based)
    vector<vector<int>> acc(H + 1, vector<int>(W + 1, 0));
    for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
            int val = (G[i][j] == '#') ? 1 : -1;
            acc[i + 1][j + 1] = acc[i + 1][j] + acc[i][j + 1] - acc[i][j] + val;
        }
    }

    long long ans = 0;
    if (W > H) {
        for (int top = 0; top < H; ++top) {
            for (int bottom = top + 1; bottom <= H; ++bottom) {
                unordered_map<int, int> cnt;
                cnt[0] = 1;
                int cur = 0;
                for (int col = 1; col <= W; ++col) {
                    int v = getsum(acc, top, col - 1, bottom, col);
                    cur += v;
                    ans += cnt[cur];
                    cnt[cur]++;
                }
            }
        }
    } else {
        for (int l = 0; l < W; ++l) {
            for (int r = l + 1; r <= W; ++r) {
                unordered_map<int, int> d;
                d[0] = 1;
                int cur = 0;
                for (int i = 0; i < H; ++i) {
                    int s = getsum(acc, 0, l, i + 1, r);
                    cur = s;
                    ans += d[cur];
                    d[cur]++;
                }
            }
        }
    }

    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    init();
    for (int i = 0; i < T; ++i) {
        solve();
    }
    return 0;
}

Submission Info

Submission Time
Task F - Balanced Rectangles
User potat_p
Language C++ 20 (gcc 12.2)
Score 0
Code Size 7128 Byte
Status TLE
Exec Time 3313 ms
Memory 40976 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 525
Status
AC × 1
AC × 39
TLE × 4
Set Name Test Cases
Sample sample_01.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt
Case Name Status Exec Time Memory
hand_01.txt AC 45 ms 40976 KiB
hand_02.txt AC 19 ms 17920 KiB
hand_03.txt AC 32 ms 28948 KiB
hand_04.txt AC 6 ms 7040 KiB
sample_01.txt AC 1 ms 3484 KiB
test_01.txt AC 1 ms 3468 KiB
test_02.txt AC 1 ms 3472 KiB
test_03.txt AC 1 ms 3612 KiB
test_04.txt AC 1 ms 3472 KiB
test_05.txt AC 1 ms 3496 KiB
test_06.txt AC 1 ms 3416 KiB
test_07.txt AC 1 ms 3564 KiB
test_08.txt AC 2 ms 3492 KiB
test_09.txt AC 2 ms 3544 KiB
test_10.txt AC 5 ms 3544 KiB
test_11.txt AC 5 ms 3424 KiB
test_12.txt AC 28 ms 3488 KiB
test_13.txt AC 17 ms 3480 KiB
test_14.txt AC 19 ms 11356 KiB
test_15.txt AC 32 ms 22092 KiB
test_16.txt TLE 3173 ms 4904 KiB
test_17.txt AC 2464 ms 5008 KiB
test_18.txt TLE 3198 ms 5048 KiB
test_19.txt AC 2433 ms 5000 KiB
test_20.txt AC 30 ms 3492 KiB
test_21.txt AC 2472 ms 5084 KiB
test_22.txt AC 2021 ms 4820 KiB
test_23.txt AC 2751 ms 5028 KiB
test_24.txt TLE 3310 ms 4700 KiB
test_25.txt AC 2835 ms 4444 KiB
test_26.txt AC 1707 ms 3912 KiB
test_27.txt AC 644 ms 4648 KiB
test_28.txt AC 387 ms 4196 KiB
test_29.txt AC 770 ms 4404 KiB
test_30.txt AC 2135 ms 4984 KiB
test_31.txt TLE 3313 ms 4568 KiB
test_32.txt AC 1914 ms 4188 KiB
test_33.txt AC 722 ms 4660 KiB
test_34.txt AC 534 ms 4644 KiB
test_35.txt AC 696 ms 4692 KiB
test_36.txt AC 452 ms 4664 KiB
test_37.txt AC 715 ms 4684 KiB
test_38.txt AC 214 ms 4648 KiB


2025-08-23 (Sat)
00:30:09 +09:00