Submission

Status:

PPPPPP-PPP

Subtask/Task Score:

90/100

Score: 90

User: Jokul

Problemset: วิศวกรรมข้อมูล

Language: c

Time: 0.002 second

Submitted On: 2025-10-10 19:54:37

#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
    int n,temp1,temp2;
    scanf("%d",&n);
    int a[n],mod[n],mul;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++)
    {
        mul=1;
        for(int j=0;j<=7;j++)
        {
            if(a[i]<=mul&&a[i]>2)
            {
                mod[i]=a[i]%(mul/2);
                break;
            }
          else if(a[i]==1||a[i]==2)
          {
            mod[i]=a[i]%2;
          }
            mul=mul*2;
        }
    }
  /*for(int i=0;i<n;i++)
    {
       printf("%d %d\n",a[i],mod[i]);
    }*/
    for(int i=0;i<n;i++)
      {
          for(int j=0;j<n-1;j++)
          {
                  if(mod[j]!=0&&mod[j+1]!=0)
                  {
                      if(a[j]/mod[j]<a[j+1]/mod[j+1])
                      {
                        temp1=a[j];
                        a[j]=a[j+1];
                        a[j+1]=temp1;
                        temp2=mod[j];
                        mod[j]=mod[j+1];
                        mod[j+1]=temp2;
                      }
                      else if(a[j]/mod[j]==a[j+1]/mod[j+1]&&a[j]<a[j+1])
                      {
                        temp1=a[j];
                        a[j]=a[j+1];
                        a[j+1]=temp1;
                        temp2=mod[j];
                        mod[j]=mod[j+1];
                        mod[j+1]=temp2;
                      }
                  }
                    ////////////////////////////////////////////////////////
            else if(mod[j]!=0&&mod[j+1]==0)
            {
              temp1=a[j];
              a[j]=a[j+1];
              a[j+1]=temp1;
              temp2=mod[j];
              mod[j]=mod[j+1];
              mod[j+1]=temp2;
            }
            else if(mod[j]==0&&mod[j+1]==0&&a[j]<a[j+1])
              {
                temp1=a[j];
                a[j]=a[j+1];
                a[j+1]=temp1;
                temp2=mod[j];
                mod[j]=mod[j+1];
                mod[j+1]=temp2;
              }
        }
    }
  /////////////////////////////////////////////////////////////////// base 10 to 2
  char s[36]={'2'},base=1,save=0;
  for(int i=0;i<n;i++)
    {
        for(int j=save;j<36;j++)
        {
            if(base>a[i])
            {
              save=j+1;
                break;
            }
          else
            {
              s[j]='0'+(a[i]%2);
            }
          a[i]=a[i]/2;
        }
    }
  /*for(int i=0;i<36;i++)
    {
      printf("%c",s[i]);
    }*/
  /////////////////////////////////////////////////////////////////// base2 to 10
  long long int sum=0,count=0,base2=1;
  char last[36];
  for(int i=35;i>=0;i--)
    {
      if(s[i]=='1'||s[i]=='0')
      {
        last[count]=s[i];
        count++;
      }
    }
  for(int i=1;i<count;i++)
    {
      base2=base2*2;
    }
  for(int i=0;i<count;i++)
    {
      if(last[i]=='1')
      {
        sum=sum+base2;
      }
      base2=base2/2;
    }
  printf("%lld ",sum);
}