Hoppa till innehållet

Tävlingsprogrammering/Uppgifter/Leden

Från Wikibooks


Leden

Du har fått i uppdrag av en turistbyrå att uppskatta hur lång tid det tar att vandra en viss vandringsled i en bergig trakt. Eftersom du är lat och hellre programmerar än går ut i naturen (varför sitter du annars här...) så tänker du uppskatta tiden utifrån kartan istället för att vandra själv.

Du antar följande: Maximal fart för en medelvandrare är 100 meter per minut. Denna maxfart uppnår man när det är 5% nedförsbacke, d.v.s. -5 meter höjdskillnad på en hundrameterssträcka. För varje procentenhets avvikelse från denna lutning så tar det två sekunder längre att gå 100 meter. Exempelvis tar det 70 sekunder på plan mark, 90 sekunder i 10% uppförsbacke och också 90 sekunder i 20% nedförsbacke eftersom man då måste gå försiktigare. Skriv ett program som, givet höjden mätt var 100:e meter, räknar ut hur lång tid det tar att vandra hela leden. Du kan givetvis anta att lutningen är konstant mellan mätpunkterna.

Indata

På första raden står ett heltal N som anger ledens längd i hundratal meter, där 1 ≤ N ≤ 100. Därefter följer en rad med N+1 heltal som anger höjden över havet vid sträckan 0, 100, 200 meter, o.s.v. Sista höjden motsvarar alltså ledens slutpunkt. Höjdangivelserna ligger mellan 0 och 8848 och lutningen överskrider aldrig 30% åt något håll.

Utdata

Programmet ska skriva ut ett heltal: antalet sekunder det tar att gå hela leden.

Exempel: Indata

5 57 60 74 74 68 52

Exempel: Utdata

388


Förklaring: Första sträckan har lutningen +3 och går på 76 sekunder. Nästa har lutningen +14 och tar 98 sekunder. Den tredje tar 70, den fjärde 62 och den femte 82.

Lösningsförslag

[redigera]
#include <iostream>
#include <math.h>
using namespace std;
int main(){
   int N, prev=0; long time=0;
   scanf("%d %d", &N, &prev);
   for(int i = 0; i<N; i++){
      int temp;
      scanf("%d", &temp);
      time+=60+2*abs(temp-prev+5);
      prev=temp;
   }
   printf("%ld\n",time);
   return 0;
}