După ce au mers împreună prin lume, Păcală și Tândală au strâns o căruță plină de bănuți de aur, iar acum îi răstoarnă pe toți în curtea casei și îi împart în N
grămezi. Păcală numără bănuții din fiecare grămadă și îi dictează lui Tândală N
numere naturale pe care acesta trebuie să le scrie în ordine pe o tăbliță. După ore bune de muncă, Păcală constată că Tândală a scris pe un singur rând, în ordine, de la stânga la dreapta, toate numerele dictate de el, dar lipite unul de altul. Acum pe tăbliță e doar un șir lung de cifre. Ce să facă Păcală acum?
Cerința
Cunoscând cele N
numere naturale dictate de Păcală, scrieți un program care să determine:
După ce au mers împreună prin lume, Păcală și Tândală au strâns o căruță plină de bănuți de aur, iar acum îi răstoarnă pe toți în curtea casei și îi împart în N
grămezi. Păcală numără bănuții din fiecare grămadă și îi dictează lui Tândală N
numere naturale pe care acesta trebuie să le scrie în ordine pe o tăbliță. După ore bune de muncă, Păcală constată că Tândală a scris pe un singur rând, în ordine, de la stânga la dreapta, toate numerele dictate de el, dar lipite unul de altul. Acum pe tăbliță e doar un șir lung de cifre. Ce să facă Păcală acum?
Cerința
Cunoscând cele N
numere naturale dictate de Păcală, scrieți un program care să determine:
1. numărul cifrelor scrise pe tăbliță de Tândală;
2. ce-a de-a K
-a cifră de pe tăbliță, în ordine de la stânga la dreapta;
3. cel mai mare număr ce se poate forma cu exact P
cifre alăturate de pe tăbliță, considerate în ordine de la stânga la dreapta.
Date de intrare
Fișierul de intrare aur.in
conţine:
– pe prima linie un număr natural C
care reprezintă numărul cerinței și poate avea valorile 1
, 2
sau 3
.
– pe cea de-a doua linie un număr natural N
dacă cerința este 1
, sau două numere naturale N
și K
(despărțite printr-un spațiu) dacă cerința este 2
, sau două numere naturale N
și P
(despărțite printr-un spațiu) dacă cerința este 3
.
– pe cea de-a treia linie, N
numere naturale despărțite prin câte un spațiu, ce reprezintă, în ordine, numerele pe care Păcală i le dictează lui Tândală.
Date de ieșire
Fișierul de ieșire aur.out
va conține pe prima linie un singur număr natural ce reprezintă rezultatul determinat conform fiecărei cerințe.
Restricții și precizări
1 ≤ N ≤ 100.000
și1 ≤ K ≤ 900.000
;- Se garantează ca există cel puțin
K
cifre scrise pe tăbliță. 1 ≤ P ≤ 18
; Se garantează ca există cel puținP
cifre scrise pe tăbliță.- toate numere dictate de Păcală sunt nenule și au cel mult
9
cifre fiecare; - Pentru rezolvarea corectă a primei cerințe se acordă
20
de puncte, pentru rezolvarea corectă a celei de-a doua cerințe se acordă30
de puncte, iar pentru rezolvarea corectă a celei de-a treia cerințe se acordă40
de puncte. - În concurs s-au acordat
10
puncte din oficiu. Aici se acordă pentru exemplele din enunț.
Exemplul 1:
aur.in
1 7 25 9 13 459 2 79 9
aur.out
12
Explicație
Se rezolvă cerința 1. Tândală a scris pe tăbliță: 259134592799
. Numărul cifrelor scrise de Tândală este 12
.
Exemplul 2:
aur.in
2 7 10 25 9 13 459 2 79 9
aur.out
7
Explicație
Se rezolvă cerința 2. N
are valoarea 7
și K
are valoarea 10
. Pe tăbliță este scris: 259134592799
, cea de-a zecea cifră este 7
.
Exemplul 3:
aur.in
3 7 4 25 9 13 459 2 79 9
aur.out
9279
Explicație
Se rezolvă cerința 3. N
are valoarea 7
și P
are valoarea 4
. Tândală a scris pe tăbliță: 259134592799
. Cel mai mare număr format din patru cifre este 9279
.
#include <bits/stdc++.h> using namespace std; ifstream cin("aur.in"); ofstream cout("aur.out"); unsigned char a[900001]; int ind; unsigned long long maxi; int nrcif(int n) { int c = 0; while(n != 0) { c++; n /= 10; } return c; } int ogl(int n) { int ogl = 0; while(n != 0) { ogl = ogl * 10 + n % 10; n /= 10; } return ogl; } int main() { long long cer , n , k , p , cnt = 0 , x; cin >> cer; if(cer == 1) { int sum = 0; cin >> n; for(int i = 1 ; i <= n ; i++) cin >> x , sum += nrcif(x); cout << sum; } else if(cer == 2) { cin >> n >> k; for(int i = 1 ; i <= n ; i++) { cin >> x; int og = ogl(x); while(x % 10 == 0) { cnt++; x /= 10; if(cnt == k) cout << 0; } while(og != 0) { cnt++; if(cnt == k) cout << og % 10; og /= 10; } } } else { cin >> n >> p; for(int i = 1 ; i <= n ; i++) { cin >> x; int og = ogl(x) , l = 0; while(x % 10 == 0) l++ , x /= 10; while(og != 0) { a[++ind] = og % 10; og /= 10; } while(l) a[++ind] = 0 , l--; } for(int i = 1 ; i <= ind - p + 1; i++) { unsigned long long rez = 0; for(int j = 1 ; j <= p ; j++) rez = rez * 10 + a[i+j-1]; if(rez > maxi) maxi = rez; } cout << maxi; } }