結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 15:37:04 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,040 bytes |
| コンパイル時間 | 445 ms |
| コンパイル使用メモリ | 81,944 KB |
| 実行使用メモリ | 101,332 KB |
| 最終ジャッジ日時 | 2025-04-16 15:42:30 |
| 合計ジャッジ時間 | 6,488 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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()
lam6er