結果
問題 | No.1231 Make a Multiple of Ten |
ユーザー |
|
提出日時 | 2020-09-19 01:55:53 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 5,650 bytes |
コンパイル時間 | 724 ms |
コンパイル使用メモリ | 13,184 KB |
実行使用メモリ | 88,228 KB |
最終ジャッジ日時 | 2024-06-22 16:51:35 |
合計ジャッジ時間 | 23,987 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 6 TLE * 4 -- * 3 |
ソースコード
import mathimport numpy as npimport decimalimport collectionsimport itertoolsimport sysimport random#Union-Findclass UnionFind():def __init__(self, n):self.n = nself.par = [-1 for i in range(self.n)]def find(self, x):if self.par[x] < 0:return xelse:self.par[x] = self.find(self.par[x])return self.par[x]def unite(self, x, y):p = self.find(x)q = self.find(y)if p == q:return Noneif p > q:p, q = q, pself.par[p] += self.par[q]self.par[q] = pdef same(self, x, y):return self.find(x) == self.find(y)def size(self, x):return -self.par[self.find(x)]#素数関連def prime_numbers(x):if x < 2:return []prime_numbers = [i for i in range(x)]prime_numbers[1] = 0for prime_number in prime_numbers:if prime_number > math.sqrt(x):breakif prime_number == 0:continuefor composite_number in range(2 * prime_number, x, prime_number):prime_numbers[composite_number] = 0return [prime_number for prime_number in prime_numbers if prime_number != 0]def is_prime(x):if x < 2:return Falseif x == 2 or x == 3 or x == 5:return Trueif x % 2 == 0 or x % 3 == 0 or x % 5 == 0:return Falseprime_number = 7difference = 4while prime_number <= math.sqrt(x):if x % prime_number == 0:return Falseprime_number += differencedifference = 6 - differencereturn True#Prime-Factorizedef prime_factorize(n):res = []while n % 2 == 0:res.append(2)n //= 2f = 3while f ** 2 <= n:if n % f == 0:res.append(f)n //= felse:f += 2if n != 1:res.append(n)return res#nCrmod = 10 ** 9 + 7class nCr():def __init__(self, n):self.n = nself.fa = [1] * (self.n + 1)self.fi = [1] * (self.n + 1)for i in range(1, self.n + 1):self.fa[i] = self.fa[i - 1] * i % modself.fi[i] = pow(self.fa[i], mod - 2, mod)def comb(self, n, r):if n < r:return 0if n < 0 or r < 0:return 0return self.fa[n] * self.fi[r] % mod * self.fi[n - r] % mod#拡張Euclidの互除法def extgcd(a, b, d = 0):g = aif b == 0:x, y = 1, 0else:x, y, g = extgcd(b, a % b)x, y = y, x - a // b * yreturn x, y, g#BITclass BinaryIndexedTree():def __init__(self, n):self.n = nself.BIT = [0] * (self.n + 1)def add(self, i, x):while i <= self.n:self.BIT[i] += xi += i & -idef query(self, i):res = 0while i > 0:res += self.BIT[i]i -= i & -ireturn res#Associative Arrayclass AssociativeArray():def __init__(self, q):self.dic = dict()self.q = qdef solve(self):for i in range(self.q):Query = list(map(int, input().split()))if Query[0] == 0:x, y, z = Queryself.dic[y] = zelse:x, y = Queryif y in self.dic:print(self.dic[y])else:print(0)#Floor Sumdef floor_sum(n, m, a, b):res = 0if a >= m:res += (n - 1) * n * (a // m) // 2a %= mif b >= m:res += n * (b // m)b %= my_max = (a * n + b) // mx_max = y_max * m - bif y_max == 0:return resres += y_max * (n + (-x_max // a))res += floor_sum(y_max, a, m, (a - x_max % a) % a)return res#Z-Algorithmdef z_algorithm(s):str_len = len(s)res = [0] * str_lenres[str_len - 1] = str_leni, j = 1, 0while i < str_len:while i + j < str_len and s[i + j] == s[j]:j += 1res[i] = jif j == 0:i += 1continuek = 1while i + k < str_len and j > res[k] + k:res[i + k] = res[k]k += 1i += kj -= kreturn resclass Manacher():def __init__(self, s):self.s = sdef coustruct(self):i, j = 0, 0s_len = len(self.s)res = [0] * s_lenwhile i < s_len:while i - j >= 0 and i + j < s_len and self.s[i - j] == self.s[i + j]:j += 1res[i] = jk = 1while i - k >= 0 and k + res[i - k] < j:k += 1i += kj -= k#mod-sqrtdef mod_sqrt(a, p):if a == 0:return 0if p == 2:return 1k = (p - 1) // 2if pow(a, k, p) != 1:return -1while True:n = random.randint(2, p - 1)r = (n ** 2 - a) % pif r == 0:return nif pow(r, k, p) == p - 1:breakk += 1w, x, y, z = n, 1, 1, 0while k:if k % 2:y, z = w * y + r * x * z, x * y + w * zw, x = w * w + r * x * x, 2 * w * xw %= px %= py %= pz %= pk >>= 1return yn = int(input())a = list(map(int, input().split()))dp = [[-float("inf")] * 10 for i in range(n + 1)]dp[0][0] = 0for i in range(n):a[i] %= 10for i in range(n):for j in range(10):dp[i + 1][j] = max(dp[i + 1][j], dp[i][j])dp[i + 1][(j + a[i]) % 10] = max(dp[i + 1][(j + a[i]) % 10], dp[i][j] + 1)print(dp[n][0])