// solutie 100 pct Mihai Georgescu //Emanuela Cerchez 100 puncte #include #include #define NMAX 100001 using namespace std; ifstream fin("unific.in"); ofstream fout("unific.out"); int n; long long int a[NMAX], rez, vmax; int nrc[10]; int cmax; int c[10];//cifrele comune perechii curente int comun(long long int x, long long int y); int concat(long long int x, long long int y, long long int &rez); void numara_cifre(long long int x); int main() {int i, ok, nr, maxim, cmax,ii; for (i=vmax=1; i<=18; i++) vmax=vmax*10; fin>>n; assert(1<=n && n<=100000); fin>>a[0]; nr=1; numara_cifre(a[0]); assert(a[0]<=vmax); for (i=1; i>a[nr]; assert(a[nr]<=vmax); assert(fin.good()); numara_cifre(a[nr]); //fout<0 && comun(a[nr],a[nr-1])) { ok=concat(a[nr-1],a[nr], rez); if (ok) {a[nr-1]=rez; nr--;} else {nr-=2;} } //{for (ii=0; ii<=nr; ii++) fout<maxim) {maxim=nrc[i]; cmax=i;} fout<1 && !v[lgrez-1]) {lgrez--;} for (i=lgrez-1; i>=0; i--) rez=rez*10+v[i]; lg=0; do {if (!c[y%10]) v[lg++]=y%10; y/=10;} while (y); while (lg>1 && !v[lg-1]) {lg--;} lgrez+=lg; assert(lgrez<=18); //lipesc cifrele din v la rez for (i=lg-1; i>=0; i--) rez=rez*10+v[i]; return lgrez; } void numara_cifre(long long int x) {if (!x) {nrc[0]++; return ;} while (x) {nrc[x%10]++;x/=10;} }