Cerința
Se dă o listă simplu înlănțuită care conține n
perechi de numere naturale (a,b)
. Fiecare pereche este stocată în câte un nod al listei; notăm cu a
primul număr stocat într-un nod și cu b
al doilea număr stocat în acel nod.
Se cere să se insereze în listă astfel:
Dacă pentru nodul curent:
a
este par șib
este impar se inserează după nodul curent un nou nod, care conține dublul sumei lor pe prima poziție a nodului inserat iar pe a doua poziție diferența dintre dublul sumei numerelor din nodul curent și al doilea număr din nodul curent;a
este impar,b
este par se inserează înaintea nodului curent un nou nod, care conține dublul sumei lor pe a doua poziție a nodului inserat și pe prima poziție diferența dintre dublul sumei numerelor din nodul curent și a primului număr din nodul curent;a
este par,b
este par se inserează după nodul curent un nou nod, care conține jumătatea sumei lor pe prima poziție a nodului inserat iar pe a doua poziție suma dintre jumătatea sumei numerelor din nodul curent și al doilea număr din nodul curent;a
este impar,b
este impar se inserează înaintea nodului curent un nou nod, care conține jumătatea sumei lor pe a doua poziție a nodului inserat și pe prima poziție suma dintre jumătatea sumei numerelor din nodul curent și a primului număr din nodul curent.
Date de intrare
Fișierul de intrare list.in
conține pe prima linie numărul n
, iar pe următoarele n
linii n
perechi de numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire list.out
va conține pe câte o linie numerele fiecărui nod al listei separate prin spații, după realizarea inserărilor.
Restricții și precizări
1 ≤ n ≤ 100.000
1 ≤ a ≤ b ≤ 100
- se recomandă utilizarea unei liste alocate dinamic
Exemplu
list.in
5 1 2 2 4 1 1 2 6 7 4
list.out
5 6 1 2 2 4 3 7 2 1 1 1 2 6 4 10 15 22 7 4
#include <bits/stdc++.h> using namespace std; ifstream cin("list.in"); ofstream cout("list.out"); int main(){ int n, a, b; cin >> n; for(int i = 1; i <= n; ++i){ cin >> a >> b; if(a % 2 == 1 && b % 2 == 0){ cout << 2 * (a + b) - a << ' ' << 2 * (a + b) << "\n"; cout << a << ' ' << b << "\n"; } else if(a % 2 == 0 && b % 2 == 1){ cout << a << ' ' << b << "\n"; cout << 2 * (a + b) << ' ' << 2 * (a + b) - b << "\n"; } else if(a % 2 == 0 && b % 2 == 0){ cout << a << ' ' << b << "\n"; cout << (a + b) / 2 << ' ' << (a + b)/2 + b << "\n"; } else{ cout << (a + b)/2 + a << ' ' << (a + b) / 2 << "\n"; cout << a << ' ' << b << "\n"; } } }