1. 程式人生 > >從零開始的異世界生活(前綴和)

從零開始的異世界生活(前綴和)

分別是 技術 ont ima 輸入數據 include 當前 後悔 前綴和

Description

486 作為有史以來最悲慘的男主,我們知道他需要經歷一些無限次的死亡和輪回才能進行下一個關卡。

技術分享圖片

現在給你 n 個連續的時間點,每個時間點 i 上都會有一個心理傷害值 hurt[i],然後告訴你 m 個死亡時間點 deth[i],以及當前死亡時間點會死亡的次數 num[i],和死亡後 486 會返回的時間點(也就是最近的存檔點 return[i])。

其整個過程就是 486 從時間點 0 開始 (hurt[0] = 0),不斷向下一個時間點 1, 2, 3… 前進,當遇到死亡時間點的時候,486 會死亡一次,然後返回到最近的一個存檔點,然後會繼續從存檔點向下一個時間點前進,當又遇到死亡時間點的時候,如果死亡次數還不夠需要死亡的次數,那麽當前不能過關,繼續回到最近的存檔點。達到需要死亡的次數之後,便不需要死亡,繼續向下一個時間點前進

。486 在每一個時間點 i 上都會遭受心理傷害 hurt[i]。為什麽 486 的心理防線不會崩潰呢,當然因為有我們的蕾姆醬了,每次受到心理傷害的時候蕾姆醬都會治愈掉。第一季的目標便是走到時間點 n,現在需要你計算一下蕾姆醬的治愈總和(也就是 486 從時間點 0 到時間點 n 所遭受的心理攻擊的總和)。

技術分享圖片

那麽萌萌的蕾姆醬到底治愈了多少呢~她這麽萌,你還不快告訴她麽~

Input

輸入數據有多組(數據組數不超過 30),到 EOF 結束。

對於每組數據:

  • 第一行輸入兩個以空格分隔的整數 n 和 m
  • n (1 <= n <= 100000) 表示 486 要到達的目標時間點(起始目標點 0,hurt[0] = 0,
    每次前進一個時間點)
  • 接下來一行輸入 n 個以空格分隔的整數,表示 hurt[i]。表示 486 在當前時間點會遭受到的傷害值
  • 接下來輸入 m (0 <= m <= n/2) 行,每行 3 個整數,分別是 deth[i],return[i] 和 num[i],表示 deth[i] 時間點需要死亡的次數以及會返回的最近的存檔點

保證:0 <= hurt[i] <= 100,1 <= deth[i-1] < return[i] < deth[i] <= n, 0 <= num[i] <= 100。

當前時間點如果不需要死亡,那麽486不會返回最近的存檔點,會繼續前進。

Output

對於每組數據,輸出一個整數,表示蕾姆醬總的治愈值(486 會遭受到的總的傷害值)。

Sample Input

10 3
1 2 3 4 5 5 4 3 2 1
4 2 1
6 5 2
10 9 1

Sample Output

62




打比賽的時候看了一眼這個題沒看懂什麽意思以為會很難,也沒有再認真去看,結束後發現是一個很簡單的前綴和問題,我和隊友都後悔不已啊。

解題思路:對所給的一組樣例解釋一下就明白怎麽使用的前綴和了,男主受到的所有傷害值為:
ans[n]是前n項的和,
(ans[4]-ans[1])+(ans[6]-ans[4])*2+(ans[10]-ans[8])*1+ans[10]


 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,m,sum,i,a,r,t;
 7     int h[100010];
 8     int ans[100010];
 9     while(scanf("%d%d",&n,&m)!=EOF)
10     {
11         sum=0;
12         for(i=1; i<=n; i++)
13         {
14             scanf("%d",&h[i]);
15         }
16         for(i=1; i<=n; i++)
17         {
18             ans[i]=ans[i-1]+h[i];///前綴和
19         }
20         while(m--)
21         {
22             scanf("%d%d%d",&a,&r,&t);
23             sum=sum+(ans[a]-ans[r-1])*t;
24         }
25         sum=sum+ans[n];
26         printf("%d\n",sum);
27     }
28     return 0;
29 }

 

從零開始的異世界生活(前綴和)