Advertisement
nicuvlad76

Untitled

Mar 4th, 2023
607
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <vector>
  4. #define N 100005
  5. using namespace std;
  6.  
  7. ifstream fin("balba.in");
  8. ofstream fout("balba.out");
  9. int v[N], fv[12], k;
  10. int s[N], sol[N];
  11.  
  12. void palindrom1(int cif)
  13. {
  14.   int i,j;
  15.   k=0;
  16.   for(i=9; i>=0; --i)
  17.     if(!(i==0 && k==0))
  18.     {
  19.       if(i==cif)s[++k]=i;
  20.       for(j=1; j<=fv[i]/2; j++)s[++k]=i;
  21.     }
  22.  
  23.   for(i=9; i>=0; i--)
  24.     if(fv[i]%2==1)
  25.     {
  26.       s[++k]=i;
  27.       break;
  28.     }
  29.   for(i=0; i<=9; i++)
  30.     if(!(i==0 && k<=1))
  31.     {
  32.       for(j=1; j<=fv[i]/2; j++)
  33.         s[++k]=i;
  34.     }
  35. }
  36.  
  37. void palindrom2(int cif)
  38. {
  39.   int i,j;
  40.   k=0;
  41.   for(i=9; i>=0; --i)
  42.     if(!(i==0 && k==0))
  43.     {
  44.       for(j=1; j<=fv[i]/2; j++)s[++k]=i;
  45.     }
  46.   for(i=9; i>=0; --i)
  47.     if(fv[i]%2==1)
  48.     {
  49.       s[++k]=i;
  50.       break;
  51.     }
  52.   for(i=0; i<=9; ++i)
  53.     if(!(i==0 && k<=1))
  54.     {
  55.       if(i==cif) s[++k]=i;
  56.       for(j=1; j<=fv[i]/2; j++)
  57.         s[++k]=i;
  58.     }
  59. }
  60.  
  61. int main()
  62. {
  63.   int cer,n,i,k1=0, k2=0,cif,ok=0,l;
  64.   fin>>cer>>n;
  65.   for(i=1; i<=n; i++)fin>>v[i];
  66.   if(cer==1)
  67.   {
  68.     for(i=1; i<=n; i++)
  69.     {
  70.       l=1;
  71.       while(i<n && v[i]==v[i+1]) i++,l++;
  72.       k1++;
  73.       if(l>=2)k2++;
  74.     }
  75.     fout<<k1<<"\n"<<k2;
  76.   }
  77.   else ///cer 2
  78.   {
  79.     for(i=1; i<=n; i++) fv[v[i]]++;
  80.     palindrom1(-1);
  81.     for(int i=1; i<=k; i++)sol[i]=s[i];
  82.     l=k;
  83.     palindrom2(-1);
  84.     if(k>l)
  85.     {
  86.       l=k;
  87.       for(i=1; i<=k; ++i)sol[i]=s[i];
  88.     }
  89.     else if(k==l)
  90.     {
  91.       ok=0;
  92.       for(i=1; i<=k; ++i)
  93.         if(sol[i]!=s[i])
  94.         {
  95.           if(sol[i]<s[i]) ok=1;
  96.           break;
  97.         }
  98.       if(ok==1)
  99.       {
  100.         for(i=1; i<=k; ++i)
  101.           sol[i]=s[i];
  102.       }
  103.     }
  104.     ///pe cifre
  105.     for(cif=0; cif<=9; cif++)
  106.       if(fv[cif]>=3)
  107.       {
  108.         fv[cif]--;
  109.         palindrom1(cif);
  110.         if(k>1)
  111.         {
  112.           l=k;
  113.           for(i=1; i<=k; ++i)sol[i]=s[i];
  114.         }
  115.         else if(k==1)
  116.         {
  117.           ok=0;
  118.           for(i=1; i<=k; ++i)
  119.             if(sol[i]!=s[i])
  120.             {
  121.               if(sol[i]<s[i])ok=1;
  122.               break;
  123.             }
  124.           if(ok==1)
  125.           {
  126.             for(i=1; i<=k; ++i)sol[i]=s[i];
  127.           }
  128.         }
  129.         palindrom2(cif);
  130.         if(k>l)
  131.         {
  132.           l=k;
  133.           for(i=1; i<=k; i++)sol[i]=s[i];
  134.  
  135.         }
  136.         else if(k==l)
  137.         {
  138.           ok=0;
  139.           for(i=1; i<=k; i++)
  140.             if(sol[i]!=s[i])
  141.             {
  142.               if(sol[i]<s[i])ok=1;
  143.               break;
  144.             }
  145.           if(ok==1)
  146.           {
  147.             for(i=1; i<=k; i++)sol[i]=s[i];
  148.           }
  149.         }
  150.         fv[cif]++;
  151.       }
  152.     for(i=1; i<=l; i++)
  153.       fout<<sol[i];
  154.   }
  155.  
  156.   return 0;
  157. }
  158.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement