Tävlingsprogrammering/Uppgifter/Förvirrad föreläsare

Från Wikibooks
Hoppa till navigering Hoppa till sök

Se problemet

Här gäller det bara att implementera det som står i uppgiften. Vi läser in en rad med tal och kollar för varje tal (utom det första eftersom han alltid gör rätt första veckan):

  • Om talet är mindre än det föregående så ökar vi en räknare "tomma" med skillnaden.
  • Om talet är större än det föregående så ökar vi en räknare "missade" med skillnaden.

Lösningsförslag i C++:

#include <iostream>
using namespace std;

int main() {
  int N, tomma, missade, forra, nu, i;
  cin >> N;
  tomma=missade=0;
  for(i=0;i<N;i++) {
    cin >> nu;
    if(i>0) {    //Inget problem första veckan
      tomma += max(forra-nu, 0);
      missade += max(nu-forra, 0);
    }
    forra=nu;   
  }
  cout << tomma << " " << missade << endl;
  return 0;
}

Ännu kortare blir programmet om man utnyttjar listfunktioner i t.ex. Python:

import sys
f=[int(x) for x in sys.stdin.read().split()[1:]]
print sum([max(x-y,0) for x,y in zip(f,f[1:])]), sum([max(y-x,0) for x,y in zip(f,f[1:])])