結果
問題 |
No.265 数学のテスト
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:48:40 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 3,040 bytes |
コンパイル時間 | 201 ms |
コンパイル使用メモリ | 82,408 KB |
実行使用メモリ | 101,268 KB |
最終ジャッジ日時 | 2025-04-15 21:50:14 |
合計ジャッジ時間 | 5,088 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 RE * 1 |
ソースコード
class ConstantNode: def __init__(self, value): self.value = value def evaluate(self, d): poly = [0] * (d + 1) poly[0] = self.value return poly class XNode: def evaluate(self, d): poly = [0] * (d + 1) if d >= 1: poly[1] = 1 return poly class AddNode: def __init__(self, left, right): self.left = left self.right = right def evaluate(self, d): a = self.left.evaluate(d) b = self.right.evaluate(d) res = [a[i] + b[i] for i in range(d + 1)] return res class MultiplyNode: def __init__(self, left, right): self.left = left self.right = right def evaluate(self, d): a = self.left.evaluate(d) b = self.right.evaluate(d) res = [0] * (d + 1) for i in range(d + 1): for j in range(d + 1): if i + j <= d: res[i + j] += a[i] * b[j] return res class DerivativeNode: def __init__(self, child): self.child = child def evaluate(self, d): poly = self.child.evaluate(d) res = [0] * (d + 1) for i in range(1, d + 1): if i - 1 <= d: res[i - 1] = poly[i] * i return res def parse_expr(s, i): node, i = parse_term(s, i) while i < len(s) and s[i] == '+': i += 1 right_node, i = parse_term(s, i) node = AddNode(node, right_node) return node, i def parse_term(s, i): node, i = parse_factor(s, i) while i < len(s) and s[i] == '*': i += 1 right_node, i = parse_factor(s, i) node = MultiplyNode(node, right_node) return node, i def parse_factor(s, i): if i >= len(s): raise ValueError("Unexpected end of string") if s[i] == 'd': i += 1 if i >= len(s) or s[i] != '{': raise ValueError("Expected '{' after 'd'") i += 1 start = i count = 1 while i < len(s) and count != 0: if s[i] == '{': count += 1 elif s[i] == '}': count -= 1 if count == 0: break i += 1 end = i i += 1 # Skip the closing '}' inner_str = s[start:end] inner_node, _ = parse_expr(inner_str, 0) return DerivativeNode(inner_node), i elif s[i].isdigit(): val = 0 while i < len(s) and s[i].isdigit(): val = val * 10 + int(s[i]) i += 1 return ConstantNode(val), i elif s[i] == 'x': return XNode(), i + 1 else: raise ValueError(f"Unexpected character: {s[i]} at position {i}") def main(): import sys input = sys.stdin.read().split() n = int(input[0]) d = int(input[1]) s = input[2] try: ast, _ = parse_expr(s, 0) except: print("0 " * (d + 1)) return result = ast.evaluate(d) print(' '.join(map(str, result[:d+1]))) if __name__ == "__main__": main()