Advertisement
Patrickmeme

Unific

Mar 26th, 2023
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3.  
  4. ifstream cin("unific.in");
  5. ofstream cout("unific.out");
  6. int cnt;
  7. #define N_MAX 100000
  8. long long v[N_MAX];
  9.  
  10. #define CIF_MAX 10
  11. int cif[CIF_MAX],cif2[CIF_MAX];
  12. int cer1[CIF_MAX],aux[CIF_MAX];
  13.  
  14. long long nr_cif_dif(int a){
  15.     int i;
  16.     long long nr=0;
  17.     nr=0;
  18.     while(a>0){
  19.         nr=nr*10+a%10;
  20.         a/=10;
  21.     }
  22.     a=nr;
  23.     nr=0;
  24.     while(a>0){
  25.         if(cif[a%10]==0 && aux[a%10]==0){
  26.             nr=nr*10+a%10;
  27.             cnt++;
  28.         }
  29.         cif[a%10]=1;
  30.         a/=10;
  31.     }
  32.     for(i=0;i<CIF_MAX;i++)
  33.         cif[i]=0;
  34.     return nr;
  35. }
  36. bool verificare(long long a , long long b){
  37.     int i,stg;
  38.     while(a>0){
  39.         cif[a%10]++;
  40.         a/=10;
  41.     }
  42.     while(b>0){
  43.         cif2[b%10]++;
  44.         b/=10;
  45.     }
  46.     stg=0;
  47.     for(i=0;i<CIF_MAX;i++){
  48.         if(cif[i]>0 && cif2[i]>0){
  49.             stg=1;
  50.             aux[i]=1;
  51.         }
  52.         cif[i]=cif2[i]=0;
  53.     }
  54.     return stg;
  55. }
  56. long long calc_put(long long b){
  57.     long long put=1;
  58.     while(b>0){
  59.         put*=10;
  60.         b/=10;
  61.     }
  62.     return put;
  63. }
  64. int main()
  65. {
  66.     int n,i,max1,n2,j
  67.     ;
  68.     long long a,b;
  69.     cin>>n;
  70.     n2=n;
  71.     n=max1=0;
  72.     for(i=0;i<n2;i++){
  73.         cin>>v[n];
  74.         n++;
  75.         ///cer 1
  76.         a=v[n];
  77.         while(a>0){
  78.             cer1[a%10]++;
  79.             max1=max(cer1[a%10],max1);
  80.             a/=10;
  81.         }
  82.         ///cer 2
  83.         while(n>0 &&((v[n-1]==0 && v[n-2]==0) || (verificare(v[n-1],v[n-2])==1))){
  84.             cnt=0;
  85.             a=nr_cif_dif(v[n-2]);
  86.             b=nr_cif_dif(v[n-1]);
  87.             a=a*calc_put(b)+b;
  88.             if(cnt>0)
  89.                 n-=2;
  90.             else{
  91.                 v[n-2]=a;
  92.                 n--;
  93.             }
  94.             for(j=0;j<CIF_MAX;j++)
  95.                 aux[j]=0;
  96.  
  97.         }
  98.  
  99.     }
  100.     ///cer 1
  101.     i=0;
  102.     while(cer1[i]!=max1)
  103.         i++;
  104.     cout<<i;
  105.     ///cer 2
  106.     cout<<"\n"<<n<<"\n";
  107.     for(i=0;i<n;i++){
  108.         cout<<v[i]<<" ";
  109.     }
  110.     return 0;
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement