結果

問題 No.265 数学のテスト
ユーザー lam6er
提出日時 2025-04-15 21:45:46
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 2,074 bytes
コンパイル時間 328 ms
コンパイル使用メモリ 81,480 KB
実行使用メモリ 81,408 KB
最終ジャッジ日時 2025-04-15 21:46:29
合計ジャッジ時間 4,027 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 30 RE * 2
権限があれば一括ダウンロードができます

ソースコード

diff #

def multiply(a, b, d):
    res = [0] * (d + 1)
    for i in range(d + 1):
        if a[i] == 0:
            continue
        for j in range(d + 1):
            if b[j] == 0:
                continue
            k = i + j
            if k > d:
                continue
            res[k] += a[i] * b[j]
    return res

def derivative(poly, 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, pos, d):
    terms = [parse_term(s, pos, d)]
    while pos[0] < len(s) and s[pos[0]] == '+':
        pos[0] += 1
        terms.append(parse_term(s, pos, d))
    res = [0] * (d + 1)
    for term in terms:
        for i in range(d + 1):
            res[i] += term[i]
    return res

def parse_term(s, pos, d):
    factors = [parse_factor(s, pos, d)]
    while pos[0] < len(s) and s[pos[0]] == '*':
        pos[0] += 1
        factors.append(parse_factor(s, pos, d))
    res = factors[0]
    for factor in factors[1:]:
        res = multiply(res, factor, d)
    return res

def parse_factor(s, pos, d):
    if s[pos[0]] == 'd':
        pos[0] += 1
        if pos[0] >= len(s) or s[pos[0]] != '{':
            raise ValueError("Expected '{' after 'd'")
        pos[0] += 1
        expr = parse_expr(s, pos, d)
        if pos[0] >= len(s) or s[pos[0]] != '}':
            raise ValueError("Expected '}' after expression")
        pos[0] += 1
        return derivative(expr, d)
    elif s[pos[0]] == 'x':
        pos[0] += 1
        res = [0] * (d + 1)
        if d >= 1:
            res[1] = 1
        return res
    elif s[pos[0]].isdigit():
        num = int(s[pos[0]])
        pos[0] += 1
        res = [0] * (d + 1)
        res[0] = num
        return res
    else:
        raise ValueError(f"Unexpected character: {s[pos[0]]}")

def main():
    import sys
    input = sys.stdin.read().split()
    N = int(input[0])
    d = int(input[1])
    S = input[2]
    pos = [0]
    poly = parse_expr(S, pos, d)
    print(' '.join(map(str, poly[:d + 1])))

if __name__ == "__main__":
    main()
0