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);
}