結果
問題 |
No.265 数学のテスト
|
ユーザー |
![]() |
提出日時 | 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()