SSL 1577——泽泽在中国

Description

  众所周知,在中国有个地方叫“万里长城”。
  泽泽一天后山玩,在捉蟋蟀的时候,忽然看见一个奇怪的洞。泽泽好奇,就钻了进去,结果……
  泽泽来到中国万里长城上。长城的城墙很高,泽泽FQ翻不出去。后面的路又被堵住了,于是泽泽只有一个选择:向前走。
泽泽向前一看,看见一块牌子,牌子上写道:
  若要离开此地,就爬出长城吧。
  泽泽无语。平时泽泽最不擅长的就是长跑,现在天不遂人愿,他遇上了麻烦。但是没有别的去路,于是他硬着头皮爬起来。
泽泽爬一个单位距离需要一个单位时间。但是这座长城年久失修,地上出现了很多的坑和杂草堆。泽泽在这些地方爬行需要更长的时间。
  现在泽泽知道这座长城的长度,以及哪些地方有坑和杂草堆,请算出泽泽需要多少时间才能爬出长城。

Input

第1行2个整数s,n。s表示长城的长度,n表示有多少坑和杂草堆。
之后的n行,每行3个整数ai,bi,ti。表示从ai到bi的一段每个单位距离泽泽需要ti的时间。泽泽在没有坑和杂草堆的地方每个单位距离需要时间1。(保证长度没有重合的)

Output

一个整数,即泽泽爬出的时间。

Sample Input

20 5
2 4 2
6 7 4
8 10 2
11 11 5
17 20 5
Sample Output

52

题目提示
这座长城泽泽需要走的时间的模拟图:
1 2 2 2 1 4 4 2 2 2 5 1 1 1 1 1 5 5 5 5
Hint

数据范围
对于30%的数据,s<=50000,n<=100
对于100%的数据,s<=2000000000,n<=500000
(保证最后结果不超过maxlongint)


简单的模拟,秒过。


代码如下:

var
 s,n,i,k:longint;
 a,b,t:array[1..500000]of longint;
begin
  readln(s,n);
  for i:=1 to n do readln(a[i],b[i],t[i]);
  for i:=1 to n do
   begin
     if (i=1)and(a[i]<>1) then k:=k+a[i]-1
      else
       if (a[i]<>b[i-1])and(i<>1) then k:=k+a[i]-b[i-1]-1;
     k:=k+(b[i]-a[i]+1)*t[i];
   end;
  if b[n]<>s then k:=k+s-b[n];
  writeln(k);
end.
原文地址:https://www.cnblogs.com/Comfortable/p/8412381.html