1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| ''' Author: NEFU AB-IN Date: 2024-07-11 16:48:47 FilePath: \LeetCode\3179\3179.py LastEditTime: 2024-07-11 17:37:28 '''
import random from collections import Counter, defaultdict, deque from datetime import datetime, timedelta from functools import lru_cache from heapq import heapify, heappop, heappush, nlargest, nsmallest from itertools import combinations, compress, permutations, starmap, tee from math import ceil, fabs, floor, gcd, log, sqrt, comb, perm from string import ascii_lowercase, ascii_uppercase from sys import exit, setrecursionlimit, stdin from typing import Any, Dict, List, Tuple, TypeVar, Union
TYPE = TypeVar('TYPE') N = int(2e5 + 10) M = int(20) INF = int(2e9) OFFSET = int(100) MOD = int(1e9 + 7)
setrecursionlimit(INF)
class Arr: array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)]) array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)]) graph = staticmethod(lambda size=N: [[] for _ in range(size)])
@staticmethod def to_1_indexed(data: Union[List, str, List[List]]): """Adds a zero prefix to the data and returns the modified data and its length.""" if isinstance(data, list): if all(isinstance(item, list) for item in data): new_data = [[0] * (len(data[0]) + 1)] + [[0] + row for row in data] return new_data, len(new_data) - 1, len(new_data[0]) - 1 else: new_data = [0] + data return new_data, len(new_data) - 1 elif isinstance(data, str): new_data = '0' + data return new_data, len(new_data) - 1 else: raise TypeError("Input must be a list, a 2D list, or a string")
class Math: max = staticmethod(lambda a, b: a if a > b else b) min = staticmethod(lambda a, b: a if a < b else b)
class Mod: add = staticmethod(lambda *args: (lambda result=0: [(result := (result + num) % MOD) for num in args] and result)()) sub = staticmethod(lambda a, b: (a - b + MOD) % MOD) mul = staticmethod(lambda *args: (lambda result=1: [(result := (result * num) % MOD) for num in args] and result)()) div = staticmethod(lambda a, b: (a * pow(b, MOD - 2, MOD)) % MOD) mod = staticmethod(lambda a: (a % MOD + MOD) % MOD)
class Std: pass
class Solution: def valueAfterKSeconds(self, n: int, k: int) -> int: nums = Arr.array(1, n) nums, n = Arr.to_1_indexed(nums)
for _ in range(k): for i in range(1, n + 1): nums[i] = (nums[i] + nums[i - 1]) % MOD
return nums[n]
class Solution: def valueAfterKSeconds(self, n: int, k: int) -> int: return comb(n + k - 1, n - 1) % MOD
|