結果

問題 No.989 N×Mマス計算(K以上)
ユーザー norioc
提出日時 2025-06-29 20:53:28
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 142 ms / 2,000 ms
コード長 2,055 bytes
コンパイル時間 482 ms
コンパイル使用メモリ 82,852 KB
実行使用メモリ 87,356 KB
最終ジャッジ日時 2025-06-29 20:53:31
合計ジャッジ時間 2,921 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

from bisect import bisect_left, bisect_right


def ceildiv(a: int, b: int) -> int:
    return (a + b - 1) // b


class Sorted:
    def __init__(self, xs: list):
        self.xs = sorted(xs)

    def __len__(self):
        return len(self.xs)

    def ilt(self, x):
        p = bisect_left(self.xs, x)
        if p == 0: return None
        return p - 1

    def ile(self, x):
        p = bisect_right(self.xs, x)
        if p == 0: return None
        return p - 1

    def igt(self, x):
        p = bisect_right(self.xs, x)
        if p == len(self.xs): return None
        return p

    def ige(self, x):
        p = bisect_left(self.xs, x)
        if p == len(self.xs): return None
        return p

    def lt(self, x, default=None):
        """Find the largest element < x, or default if it doesn't exist."""
        p = self._lt(x)
        if p is None: return default
        return self.xs[p]

    def le(self, x, default=None):
        """Find the largest element <= x, or default if it doesn't exist."""
        p = self._le(x)
        if p is None: return default
        return self.xs[p]

    def gt(self, x, default=None):
        """Find the smallest element > x, or default if it doesn't exist."""
        p = self._gt(x)
        if p is None: return default
        return self.xs[p]

    def ge(self, x, default=None):
        """Find the smallest element >= x, or default if it doesn't exist."""
        p = self._ge(x)
        if p is None: return default
        return self.xs[p]


N, M, K = map(int, input().split())
s = input().split()
op = s[0]
B = [int(x) for x in s[1:]]
A = []
for _ in range(N):
    A.append(int(input()))


def calc_add():
    res = 0
    bb = Sorted(B)
    for a in A:
        p = bb.ige(K - a)
        if p is None: continue
        res += len(bb) - p

    return res


def calc_mul():
    res = 0
    bb = Sorted(B)
    for a in A:
        p = bb.ige(ceildiv(K, a))
        if p is None: continue
        res += len(bb) - p

    return res


if op == '+':
    print(calc_add())
else:
    print(calc_mul())
0