結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:16:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 153 ms / 2,000 ms |
| コード長 | 2,703 bytes |
| コンパイル時間 | 294 ms |
| コンパイル使用メモリ | 82,536 KB |
| 実行使用メモリ | 77,440 KB |
| 最終ジャッジ日時 | 2025-06-12 21:17:00 |
| 合計ジャッジ時間 | 3,701 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
class Parser:
def __init__(self, s, d):
self.s = s
self.pos = 0
self.d = d
def parse_expression(self):
res = self.parse_term()
while self.pos < len(self.s) and self.s[self.pos] == '+':
self.pos += 1
term = self.parse_term()
res = self.add_poly(res, term)
return res
def parse_term(self):
res = self.parse_factor()
while self.pos < len(self.s) and self.s[self.pos] == '*':
self.pos += 1
factor = self.parse_factor()
res = self.multiply_poly(res, factor)
return res
def parse_factor(self):
c = self.s[self.pos]
if c == 'd':
self.pos += 1
if self.pos >= len(self.s) or self.s[self.pos] != '{':
raise ValueError("Expected '{' after 'd'")
self.pos += 1
expr_poly = self.parse_expression()
if self.pos >= len(self.s) or self.s[self.pos] != '}':
raise ValueError("Expected '}' after expression")
self.pos += 1
return self.derivative(expr_poly)
elif c == 'x':
self.pos += 1
return self.create_x_poly()
elif c.isdigit():
num = int(c)
self.pos += 1
return self.create_number_poly(num)
else:
raise ValueError(f"Unexpected character: {c} at pos {self.pos}")
def add_poly(self, a, b):
res = [0] * (self.d + 1)
for i in range(self.d + 1):
res[i] = a[i] + b[i]
return res
def multiply_poly(self, a, b):
res = [0] * (self.d + 1)
for i in range(self.d + 1):
if a[i] == 0:
continue
for j in range(self.d + 1):
if b[j] == 0:
continue
k = i + j
if k <= self.d:
res[k] += a[i] * b[j]
return res
def derivative(self, poly):
res = [0] * (self.d + 1)
for i in range(1, self.d + 1):
res[i-1] = poly[i] * i
return res
def create_x_poly(self):
poly = [0] * (self.d + 1)
if self.d >= 1:
poly[1] = 1
return poly
def create_number_poly(self, num):
poly = [0] * (self.d + 1)
poly[0] = num
return poly
def main():
import sys
input = sys.stdin.read().split()
n = int(input[0])
d = int(input[1])
s = input[2]
parser = Parser(s, d)
try:
poly = parser.parse_expression()
except:
print("0 " * (d + 1))
return
print(' '.join(map(str, poly)))
if __name__ == "__main__":
main()
gew1fw