Un copil construiește un triunghi cu numerele naturale nenule astfel:
- în vârful triunghiului scrie valoarea
1
; - completează liniile triunghiului de sus în jos, iar căsuțele de pe aceeași linie de la stânga la dreapta cu numere naturale consecutive, ca în figurile următoare.
În figura 1 este ilustrat un astfel de triunghi având 5
linii, conținând numerele naturale de la 1
la 15
.
Un copil construiește un triunghi cu numerele naturale nenule astfel:
- în vârful triunghiului scrie valoarea
1
; - completează liniile triunghiului de sus în jos, iar căsuțele de pe aceeași linie de la stânga la dreapta cu numere naturale consecutive, ca în figurile următoare.
În figura 1 este ilustrat un astfel de triunghi având 5
linii, conținând numerele naturale de la 1
la 15
.
În acest triunghi copilul începe să construiască drumuri, respectând următoarele reguli:
- orice drum începe din
1
; - din orice căsuță se poate deplasa fie în căsuța situată pe linia următoare în stânga sa (deplasare codificată cu
1
), fie în căsuța situată pe linia următoare în dreapta sa (deplasare codificată cu2
); - orice drum va fi descris prin succesiunea deplasărilor efectuate.
De exemplu, drumul ilustrat în figura 2 poate fi descris astfel: 1 2 2 2
.
Cerința
Scrieţi un program care rezolvă următoarele două cerințe:
1. citește descrierea unui drum și afișează numărul la care se termină drumul;
2. citește un număr natural nenul K, determină un drum care se termină cu numărul K pentru care suma numerelor prin care trece drumul este maximă și afișează această sumă.
Date de intrare
Fișierul de intrare numere17.in
conține pe prima linie un număr natural C
reprezentând cerința din problemă care trebuie rezolvată (1 sau 2).
Dacă C
este egal cu 1
, a doua linie din fișier conține un număr natural N
, reprezentând lungimea drumului, iar a treia linie din fișier conţine descrierea drumului sub forma a N
valori, 1
sau 2
, separate între ele prin câte un spațiu.
Dacă C
este egal cu 2
, a doua linie din fișier conține numărul natural K
.
Date de ieșire
Fișierul de ieșire numere17.out
va conține o singură linie pe care va fi scris un singur număr natural. Dacă C=1
, va fi scris numărul cu care se termină drumul descris în fișierul de intrare. Dacă C=2
, va fi scrisă suma maximă a numerelor aflate pe un drum care se termină cu numărul K
.
Restricții și precizări
1 ≤ n ≤ 10000
1 ≤ K ≤ 10001*10002/2
- Pentru rezolvarea corectă a cerinţei 1 se acordă 40 de puncte; pentru rezolvarea corectă a cerinței 2 se acordă 50 de puncte. În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemple.
Exemplul 1
numere17.in
1 4 1 2 1 2
numere17.out
13
Explicație
Cerinţa este 1. Drumul descris are lungimea 4
și trece prin numerele 1,2,5,8,13
Exemplul 2
numere17.in
2 9
numere17.out
19
Explicație
Cerinţa este 2. Suma maximă se obține pe drumul care trece prin numerele 1,3,6,9
(1+3+6+9=19
).
#include <bits/stdc++.h> using namespace std; ifstream fin("numere17.in"); ofstream fout("numere17.out"); int main() { int n , c , k , x , cnt = 0 , m = 1; fin >> c; if (c == 1) { fin >> n; for (int i = 1; i <= n ; ++i) { fin >> x; cnt++; if (x == 1) m += cnt; if (x == 2) m += cnt+1; } fout << m; } else { fin >> k; int x = 1 , s = 0 , maxi = 0; while (maxi < k) { maxi = maxi + x; s += maxi; x++; } s = s -(maxi - k) * (maxi - k + 1) / 2; fout << s; } return 0; }