結果
問題 | No.913 木の燃やし方 |
ユーザー |
![]() |
提出日時 | 2025-03-31 18:00:21 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,573 bytes |
コンパイル時間 | 275 ms |
コンパイル使用メモリ | 82,132 KB |
実行使用メモリ | 132,992 KB |
最終ジャッジ日時 | 2025-03-31 18:01:25 |
合計ジャッジ時間 | 8,860 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 WA * 20 |
ソースコード
def main():import sysinput = sys.stdin.read().split()idx = 0N = int(input[idx])idx +=1A = list(map(int, input[idx:idx+N]))idx += N# Left to right: compute best interval ending at ileft_cost = [0]*Nleft_len = [0]*Nleft_sum = [0]*Nfor i in range(N):if i == 0:left_cost[i] = 1 + A[i]left_len[i] = 1left_sum[i] = A[i]else:# cost of extending previous intervalprev_len = left_len[i-1]prev_sum = left_sum[i-1]prev_cost = left_cost[i-1]new_len = prev_len + 1new_sum = prev_sum + A[i]delta = 2*prev_len +1 + A[i]new_cost = prev_cost + deltacost_new = 1 + A[i]if new_cost < cost_new:left_cost[i] = new_costleft_len[i] = new_lenleft_sum[i] = new_sumelse:left_cost[i] = cost_newleft_len[i] = 1left_sum[i] = A[i]# Right to left: compute best interval starting at iright_cost = [0]*Nright_len = [0]*Nright_sum = [0]*Nfor i in range(N-1, -1, -1):if i == N-1:right_cost[i] = 1 + A[i]right_len[i] = 1right_sum[i] = A[i]else:# extend next intervalnext_len = right_len[i+1]next_sum = right_sum[i+1]next_cost = right_cost[i+1]new_len = next_len + 1new_sum = next_sum + A[i]delta = 2*next_len +1 + A[i]new_cost = next_cost + deltacost_new = 1 + A[i]if new_cost < cost_new:right_cost[i] = new_costright_len[i] = new_lenright_sum[i] = new_sumelse:right_cost[i] = cost_newright_len[i] = 1right_sum[i] = A[i]# Now compute the merged cost for each i and compare with left and rightans = [0]*Nfor i in range(N):candidates = [left_cost[i], right_cost[i]]l_len = left_len[i]r_len = right_len[i]l_sum = left_sum[i]r_sum = right_sum[i]merged_len = l_len + r_len -1merged_sum = l_sum + r_sum - A[i]merged_cost = merged_len * merged_len + merged_sumcandidates.append(merged_cost)ans[i] = min(candidates)for a in ans:print(a)if __name__ == '__main__':main()