首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

CodeForces #248 A/B 題解:蘋果分配與區間求和

     編輯:C++ 入門

A 題:蘋果公平分配

只有 100g 和 200g 蘋果,判斷能否分成等重兩堆。

核心邏輯

  • 統計 cnt100、cnt200
  • 若 cnt200 為偶數:需 cnt100 也為偶數
  • 若 cnt200 為奇數:需 cnt100 ≥ 2 且 (cnt100-2) 為偶數(兩個 100g 合成一個 200g)

時間 O(n),空間 O(1)。

B 題:區間求和(線段樹 / 前綴和)

兩類查詢:原數組區間和、排序後數組區間和。官方解法用前綴和更簡潔:

// 預處理
sort(a+1, a+n+1);
for (i=1; i<=n; ++i) {
    sum[0][i] = sum[0][i-1] + original[i];
    sum[1][i] = sum[1][i-1] + a[i];
}
// 查詢
ans = sum[type-1][r] - sum[type-1][l-1];

作者最初用雙線段樹,後發現前綴和足夠,體現「Done is better than perfect」。

心得

  • A 題:仔細分析奇偶性,別想太複雜
  • B 題:靜態區間和首選前綴和,線段樹適合動態更新
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved