結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 16:53:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,015 bytes |
| コンパイル時間 | 418 ms |
| コンパイル使用メモリ | 82,056 KB |
| 実行使用メモリ | 81,728 KB |
| 最終ジャッジ日時 | 2025-06-12 16:53:49 |
| 合計ジャッジ時間 | 4,207 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 RE * 2 |
ソースコード
def main():
import sys
N = int(sys.stdin.readline())
d = int(sys.stdin.readline())
S = sys.stdin.readline().strip()
def parse_expression(s, pos, max_degree):
terms = []
while pos < len(s):
term, pos = parse_term(s, pos, max_degree)
terms.append(term)
if pos < len(s) and s[pos] == '+':
pos += 1
else:
break
total = [0] * (max_degree + 1)
for term in terms:
for i in range(max_degree + 1):
total[i] += term[i]
return total, pos
def parse_term(s, pos, max_degree):
factors = []
while pos < len(s):
factor, pos = parse_factor(s, pos, max_degree)
factors.append(factor)
if pos < len(s) and s[pos] == '*':
pos += 1
else:
break
product = [0] * (max_degree + 1)
product[0] = 1 # Initialize with 1 for multiplication
for factor in factors:
product = multiply_polynomials(product, factor, max_degree)
return product, pos
def parse_factor(s, pos, max_degree):
if pos >= len(s):
return [0] * (max_degree + 1), pos
if s[pos] == 'x':
return make_polynomial(1, 1, max_degree), pos + 1
elif s[pos].isdigit():
num = 0
while pos < len(s) and s[pos].isdigit():
num = num * 10 + int(s[pos])
pos += 1
return make_polynomial(0, num, max_degree), pos
elif s[pos] == 'd':
# Process derivative: d{...}
pos += 2 # Skip 'd' and '{'
expr, pos = parse_expression(s, pos, max_degree)
derivative = compute_derivative(expr, max_degree)
if pos < len(s) and s[pos] == '}':
pos += 1
else:
pass # Assuming valid input
return derivative, pos
else:
return [0] * (max_degree + 1), pos
def make_polynomial(degree, coefficient, max_degree):
poly = [0] * (max_degree + 1)
if degree <= max_degree:
poly[degree] = coefficient
return poly
def compute_derivative(poly, max_degree):
derivative = [0] * (max_degree + 1)
for k in range(1, max_degree + 1):
if k - 1 <= max_degree:
derivative[k - 1] = poly[k] * k
return derivative
def multiply_polynomials(a, b, max_degree):
result = [0] * (max_degree + 1)
for i in range(max_degree + 1):
if a[i] == 0:
continue
for j in range(max_degree + 1):
if b[j] == 0:
continue
k = i + j
if k > max_degree:
continue
result[k] += a[i] * b[j]
return result
poly, pos = parse_expression(S, 0, d)
print(' '.join(map(str, poly)))
if __name__ == "__main__":
main()
gew1fw