Advertisement
nicuvlad76

Untitled

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