nicuvlad76

Untitled

Mar 4th, 2023
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 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.     }
  76.     fout<<k1<<"\n"<<k2;
  77.   }
  78.   else ///cer 2
  79.   {
  80.     for(i=1; i<=n; i++) fv[v[i]]++;
  81.     palindrom1(-1);
  82.     for(int i=1; i<=k; i++)sol[i]=s[i];
  83.     l=k;
  84.     palindrom2(-1);
  85.     if(k>1)
  86.     {
  87.       l=k;
  88.       for(i=1; i<=k; ++i)sol[i]=s[i];
  89.     }
  90.     else if(k==1)
  91.     {
  92.       ok=0;
  93.       for(i=1; i<=k; ++i)
  94.         if(sol[i]!=s[i])
  95.         {
  96.           if(sol[i]<s[i]) ok=1;
  97.           break;
  98.         }
  99.       if(ok==1)
  100.       {
  101.         for(i=1; i<=k; ++i)
  102.           sol[i]=s[i];
  103.       }
  104.     }
  105.     ///pe cifre
  106.     for(cif=0; cif<=9; cif++)
  107.       if(fv[cif]>=3)
  108.       {
  109.         fv[cif]--;
  110.         palindrom1(cif);
  111.         if(k>1)
  112.         {
  113.           l=k;
  114.           for(i=1; i<=k; ++i)sol[i]=s[i];
  115.         }
  116.         else if(k==1)
  117.         {
  118.           ok=0;
  119.           for(i=1; i<=k; ++i)
  120.             if(sol[i]!=s[i])
  121.             {
  122.               if(sol[i]<s[i])ok=1;
  123.               break;
  124.             }
  125.           if(ok==1)
  126.           {
  127.             for(i=1; i<=k; ++i)sol[i]=s[i];
  128.           }
  129.         }
  130.         palindrom2(cif);
  131.         if(k>l)
  132.         {
  133.           l=k;
  134.           for(i=1; i<=k; i++)sol[i]=s[i];
  135.  
  136.         }
  137.         else if(k==l)
  138.         {
  139.           ok=0;
  140.           for(i=1; i<=k; i++)
  141.             if(sol[i]!=s[i])
  142.             {
  143.               if(sol[i]<s[i])ok=1;
  144.               break;
  145.             }
  146.           if(ok==1)
  147.           {
  148.             for(i=1; i<=k; i++)sol[i]=s[i];
  149.           }
  150.         }
  151.         fv[cif]++;
  152.       }
  153.     for(i=1; i<=l; i++)
  154.       fout<<sol[i];
  155.   }
  156.  
  157.   return 0;
  158. }
  159.  
Advertisement
Add Comment
Please, Sign In to add comment