Având mai multe cuburi la dispoziţie, Crina şi Rareş au hotărât să construiască clădiri prin alipirea a două sau mai multor turnuri. Turnurile au fost obţinute prin aşezarea cuburilor unul peste celălalt. Înălţimea unui turn este dată de numărul de cuburi din care este format.
Exemplu
cladiri.in
63112 2772424221741273721212
cladiri.out
7 328
Explicație
Cel mai înalt turn este format din 7
cuburi. Sunt 3
clădiri care au în construcţia lor turnuri cu această înălţime, cele pe care Crina lipeşte numerele: 2772
, 1741
şi 27372
. Rareş lipeşte pe clădiri bileţele cu numerele: 2121
, 27372
, 1471
, 22424
, 2772
şi 2113
. Două dintre aceste clădiri au primit aceleaşi numere și de la Crina: 2772
şi 27372
. Valoarea determinată conform cerinţei c) este 8
. Se adaugă un
cub la clădirea cu numărul 3112
, 2
cuburi la cea cu numărul 42422
, 3
cuburi la clădirea cu numărul 1741
şi 2
cuburi la cea cu numărul 1212
.
#include <bits/stdc++.h> using namespace std; ifstream cin("cladiri.in"); ofstream cout("cladiri.out"); int cmax(long long n) { int max = 0; while(n != 0){if(n % 10 > max) max = n % 10 ; n /= 10;} return max; } int pal(long long n) { long long aux = n , ogl = 0; while(aux!=0){ogl=ogl*10+aux%10;aux/=10;} if(ogl==n)return 1; else return 0; } int lipsa(long long int n) { long long aux = n , ogl = 0 , cnt = 0; while(aux != 0){ogl = ogl * 10 + aux % 10 ; aux /= 10;} while(n!=0) { if(n % 10 > ogl % 10)cnt += n % 10 - ogl % 10; else cnt += ogl % 10 - n % 10; n /= 10; ogl /= 10; }return cnt; } long long a[10001]; int main() { int n , cnt = 0 , max = 0 , nr = 0; cin >> n; for(int i = 0 ; i < n ; ++i) cin >> a[i]; for(int i = 0 ; i < n ; ++i) { if(cmax(a[i]) > max)max = cmax(a[i]) , cnt=0; if(cmax(a[i]) == max) cnt++; } cout << max << ' ' << cnt << endl; cnt = 0; for(int i = 0 ; i < n ; ++i) { if(pal(a[i])) nr++; else cnt+=lipsa(a[i]); } cout << nr << endl << cnt/2; return 0; }