結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

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)))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0