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

Codeforces 558A Lala Land and Apple Trees:雙指針貪心收集蘋果

     編輯:關於C++

題目大意

數軸上有 n 棵蘋果樹,位置 x_i(非零),蘋果數 a_i。從 0 出發,先選方向(左/右),每到一棵未訪問的樹摘光蘋果並反向,直到當前方向無未訪問樹。求最大蘋果總數。

關鍵觀察

路徑必然是「左、右、左、右…交替」訪問樹。設左邊樹按位置降序(離 0 由近到遠)為 L[1..p],右邊樹按位置升序為 R[1..q]。
若先向左:訪問順序 L[1], R[1], L[2], R[2], ...,直到某側耗盡。
若先向右:訪問順序 R[1], L[1], R[2], L[2], ...。
因此只需模擬兩種起始方向,取最大值。

算法流程

  1. 讀入數據,分離左(x<0)和右(x>0)樹。
  2. 左樹按 x 降序,右樹按 x 升序。
  3. 模擬函數 simulate(firstLeft):雙指針 i,j 分別指向左右下一棵樹,按順序累加蘋果,直到對應方向無樹。
  4. 答案 = max(先左, 先右)。

C++ 實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved