結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:42:43 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,086 bytes |
| コンパイル時間 | 171 ms |
| コンパイル使用メモリ | 82,484 KB |
| 実行使用メモリ | 85,116 KB |
| 最終ジャッジ日時 | 2025-03-31 17:43:45 |
| 合計ジャッジ時間 | 5,500 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 29 RE * 3 |
ソースコード
class Node:
def evaluate(self, d):
pass
class ConstantNode(Node):
def __init__(self, value):
self.value = value
def evaluate(self, d):
coeff = [0] * (d + 1)
coeff[0] = self.value
return coeff
class XNode(Node):
def evaluate(self, d):
coeff = [0] * (d + 1)
if d >= 1:
coeff[1] = 1
return coeff
class AddNode(Node):
def __init__(self, left, right):
self.left = left
self.right = right
def evaluate(self, d):
left_coeff = self.left.evaluate(d)
right_coeff = self.right.evaluate(d)
return [left_coeff[i] + right_coeff[i] for i in range(d + 1)]
class MultiplyNode(Node):
def __init__(self, left, right):
self.left = left
self.right = right
def evaluate(self, d):
left_coeff = self.left.evaluate(d)
right_coeff = self.right.evaluate(d)
result = [0] * (d + 1)
for a in range(d + 1):
if left_coeff[a] == 0:
continue
for b in range(d + 1):
if right_coeff[b] == 0:
continue
if a + b <= d:
result[a + b] += left_coeff[a] * right_coeff[b]
return result
class DerivNode(Node):
def __init__(self, child):
self.child = child
def evaluate(self, d):
child_coeff = self.child.evaluate(d)
deriv_coeff = [0] * (d + 1)
for i in range(d + 1):
if i + 1 <= d:
deriv_coeff[i] = (i + 1) * child_coeff[i + 1]
else:
deriv_coeff[i] = 0
return deriv_coeff
def parse_expression(s, pos=0):
node, pos = parse_term(s, pos)
while pos < len(s) and s[pos] == '+':
pos += 1
next_node, pos = parse_term(s, pos)
node = AddNode(node, next_node)
return node, pos
def parse_term(s, pos):
node, pos = parse_factor(s, pos)
while pos < len(s) and s[pos] == '*':
pos += 1
next_node, pos = parse_factor(s, pos)
node = MultiplyNode(node, next_node)
return node, pos
def parse_factor(s, pos):
if pos < len(s) and s[pos] == 'd' and pos + 1 < len(s) and s[pos + 1] == '{':
pos += 2
child, pos = parse_expression(s, pos)
if pos >= len(s) or s[pos] != '}':
raise ValueError("Missing closing brace")
pos += 1
return DerivNode(child), pos
else:
return parse_primary(s, pos)
def parse_primary(s, pos):
if pos >= len(s):
raise ValueError("Unexpected end of input")
c = s[pos]
if c == 'x':
return XNode(), pos + 1
elif c.isdigit():
val = int(c)
return ConstantNode(val), pos + 1
else:
raise ValueError(f"Unexpected character {c} at position {pos}")
# Read input
n = int(input())
d = int(input())
s = input().strip()
# Parse the expression
ast, pos = parse_expression(s, 0)
if pos != len(s):
raise ValueError("Invalid input")
# Evaluate and output
result = ast.evaluate(d)
print(' '.join(map(str, result)))
lam6er