1082 - Triunghi 3

De la Universitas MediaWiki

Se consideră un triunghi alcătuit din numere naturale scrise pe n linii ca în figura alăturată. Liniile triunghiului sunt numerotate de la 1 la n, începând cu linia de la baza triunghiului (linia de jos), iar poziţiile pe linie sunt numerotate începând cu 1 de la stânga la dreapta.

Fiecare număr din triunghi, exceptând pe cele de pe linia 1, este egal cu suma numerelor aflate imediat sub el, în stânga şi respectiv în dreapta lui.

Cerinţă

Cunoscând câte un număr de pe fiecare linie a triunghiului, determinaţi toate numerele de pe linia 1.

Date de intrare

Fișierul de intrare triunghi3.in conține pe prima linie numărul natural n reprezentând numărul de linii din triunghi. Pe următoarele n linii sunt descrise informaţiile despre triunghi. Mai exact, pe linia i (1≤i≤n) dintre cele n se află două numere naturale separate prin spaţiu pi vi indicând poziţia şi respectiv valoarea numărului cunoscut de pe linia i a triunghiului.

Date de ieșire

Fișierul de ieșire triunghi3.out va conține o singură linie, pe care se găsesc n numere naturale separate prin câte un spaţiu, reprezentând în ordine de la stânga la dreapta numerele scrise pe linia 1 a triunghiului.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • 1 ≤ pi ≤ n+1-i, pentru 1≤i≤n
  • Toate numerele din triunghi sunt numere naturale cu cel mult 18 cifre.

Exemplu:

triunghi3.in

5
4 4
2 5
3 13
2 25
1 45

triunghi3.out

1 2 3 4 2

Încărcare soluție

Lipește codul aici



import sys

n = int(input())

a = [[0] * 1001

for i in range(1001)] x = [] for i in range(1, n+1):

   poz, nr = map(int, input().split())
   x.append((nr, poz))
   a[n-i+1][poz] = nr

for i in range(2, n+1):

   pz = x[n-i+1][1] - 1
   while pz >= 1:
       a[i][pz] = a[i-1][pz] - a[i][pz+1]
       pz -= 1
   pz = x[n-i+1][1] + 1
   while pz <= i:
       a[i][pz] = a[i-1][pz-1] - a[i][pz-1]
       pz += 1

for i in range(1, n+1):

   print(a[n][i], end=' ')