結果
問題 | No.265 数学のテスト |
ユーザー |
![]() |
提出日時 | 2025-06-12 21:13:49 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,254 bytes |
コンパイル時間 | 184 ms |
コンパイル使用メモリ | 82,556 KB |
実行使用メモリ | 395,284 KB |
最終ジャッジ日時 | 2025-06-12 21:15:37 |
合計ジャッジ時間 | 6,688 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 4 |
other | TLE * 1 -- * 31 |
ソースコード
import sys def main(): sys.setrecursionlimit(1 << 25) N = int(sys.stdin.readline()) d = int(sys.stdin.readline()) S = sys.stdin.readline().strip() def parse_expression(s, i, max_degree): terms = [] terms.append(parse_term(s, i, max_degree)) while i[0] < len(s) and s[i[0]] == '+': i[0] += 1 terms.append(parse_term(s, i, max_degree)) result = [0] * (max_degree + 1) for term in terms: for degree in range(max_degree + 1): result[degree] += term[degree] return result def parse_term(s, i, max_degree): factors = [] factors.append(parse_factor(s, i, max_degree)) while i[0] < len(s) and s[i[0]] == '*': i[0] += 1 factors.append(parse_factor(s, i, max_degree)) result = [0] * (max_degree + 1) result[0] = 1 for factor in factors: new_result = [0] * (max_degree + 1) for deg1 in range(max_degree + 1): if result[deg1] == 0: continue for deg2 in range(max_degree + 1): if factor[deg2] == 0: continue total_deg = deg1 + deg2 if total_deg > max_degree: continue new_result[total_deg] += result[deg1] * factor[deg2] result = new_result return result def parse_factor(s, i, max_degree): if s[i[0]] == 'd': i[0] += 1 if i[0] >= len(s) or s[i[0]] != '{': raise ValueError("Expected '{' after 'd'") i[0] += 1 start = i[0] depth = 1 while i[0] < len(s) and depth > 0: if s[i[0]] == '{': depth += 1 elif s[i[0]] == '}': depth -= 1 if depth == 0: break i[0] += 1 if depth != 0: raise ValueError("Unmatched '{' in d{} expression") end = i[0] sub_expr = s[start:end] sub_i = [0] sub_poly = parse_expression(sub_expr, sub_i, max_degree) derived = differentiate(sub_poly, max_degree) i[0] += 1 return derived elif s[i[0]].isdigit(): num = int(s[i[0]]) i[0] += 1 poly = [0] * (max_degree + 1) poly[0] = num return poly elif s[i[0]] == 'x': i[0] += 1 poly = [0] * (max_degree + 1) if max_degree >= 1: poly[1] = 1 return poly else: raise ValueError(f"Unexpected character: {s[i[0]]}") def differentiate(poly, max_degree): new_poly = [0] * (max_degree + 1) for degree in range(1, len(poly)): if degree - 1 <= max_degree: new_poly[degree - 1] += degree * poly[degree] return new_poly i = [0] try: final_poly = parse_expression(S, i, d) print(' '.join(map(str, final_poly))) except Exception as e: print(e) sys.exit(1) if __name__ == '__main__': main()