結果
問題 | No.2857 Div Array |
ユーザー | prin_kemkem |
提出日時 | 2024-08-25 15:59:06 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,937 bytes |
コンパイル時間 | 646 ms |
コンパイル使用メモリ | 82,536 KB |
実行使用メモリ | 120,308 KB |
最終ジャッジ日時 | 2024-08-25 15:59:14 |
合計ジャッジ時間 | 7,859 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 97 ms
87,684 KB |
testcase_01 | AC | 111 ms
81,328 KB |
testcase_02 | AC | 112 ms
81,376 KB |
testcase_03 | AC | 114 ms
81,692 KB |
testcase_04 | AC | 122 ms
81,356 KB |
testcase_05 | AC | 108 ms
81,508 KB |
testcase_06 | AC | 105 ms
81,424 KB |
testcase_07 | AC | 116 ms
81,380 KB |
testcase_08 | AC | 112 ms
81,104 KB |
testcase_09 | AC | 132 ms
81,460 KB |
testcase_10 | TLE | - |
testcase_11 | TLE | - |
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 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
ソースコード
from collections import defaultdict, deque, Counter # from functools import cache # import copy from itertools import combinations, permutations, product, accumulate, groupby, chain # from more_itertools import distinct_permutations from heapq import heapify, heappop, heappush import math import bisect from pprint import pprint from random import randint, shuffle, randrange import sys # sys.setrecursionlimit(200000) input = lambda: sys.stdin.readline().rstrip('\n') inf = float('inf') mod1 = 10**9+7 mod2 = 998244353 def ceil_div(x, y): return -(-x//y) ################################################# class Matrix(): def __init__(self, mat, mod=None): self.mat = mat self.n = len(mat) self.m = len(mat[0]) self.mod = mod def __mul__(self, other, r=False): ret = Matrix([[0]*other.m for _ in range(self.n)], self.mod) other_t = other.t() if r: for i in range(self.n): s = self.mat[i] for j in range(other.m): if j <= i: o = other_t.mat[j] for k in range(self.m): ret[i][j] += s[k]*o[k] if self.mod is not None: ret[i][j] %= self.mod else: ret[i][j] = ret[j][i] else: for i in range(self.n): s = self.mat[i] for j in range(other.m): o = other_t.mat[j] for k in range(self.m): ret[i][j] += s[k]*o[k] if self.mod is not None: ret[i][j] %= self.mod return ret def __add__(self, other): ret = Matrix([[self.mat[i][j] for j in range(self.m)] for i in range(self.n)], self.mod) for i in range(other.n): for j in range(other.m): ret[i][j] += other.mat[i][j] if self.mod is not None: ret[i][j] %= self.mod return ret def __sub__(self, other): ret = Matrix([[self.mat[i][j] for j in range(self.m)] for i in range(self.n)], self.mod) for i in range(other.n): for j in range(other.m): ret[i][j] -= other.mat[i][j] if self.mod is not None: ret[i][j] %= self.mod return ret def __pow__(self, scalar): a = Matrix([[self.mat[i][j] for j in range(self.m)] for i in range(self.n)], self.mod) ret = Matrix.e(self.n, self.mod) while scalar: if scalar&1: ret *= a a *= a scalar >>= 1 return ret def scalar_mul(self, a): ret = Matrix([[self.mat[i][j] for j in range(self.m)] for i in range(self.n)], self.mod) for i in range(self.n): for j in range(self.m): ret[i][j] *= a if self.mod is not None: ret[i][j] %= self.mod return ret def __repr__(self) -> str: return self.mat.__repr__() def __getitem__(self, i): return self.mat[i] def __setitem__(self, i, x): self.mat[i] = x def __len__(self): return len(self.mat) def t(self): return Matrix([list(column) for column in zip(*self.mat)], self.mod) def turn(matrix): if type(matrix) != 'Matrix': return Matrix([list(column) for column in zip(*matrix)]) return Matrix([list(column) for column in zip(*matrix.mat)], matrix.mod) def e(size, mod): return Matrix([[i == j for j in range(size)] for i in range(size)], mod) N, M, K = map(int, input().split()) A = [[False]*(M+1) for _ in range(M+1)] div = [0]+[M//i for i in range(1, M+1)] for i in range(1, M+1): for j in range(1, M+1): A[i][j] = abs(div[i] - div[j]) <= K dp = [[0]+[1]*M] dp = Matrix(dp, mod2) A = Matrix(A, mod2) dp = dp*A**(N-1) ans = 0 for a in dp[0]: ans += a ans %= mod2 print(ans)