Submission
Status:
PP-PPPP-PP
Subtask/Task Score:
80/100
Score: 80
User: august
Problemset: วิศวกรรมข้อมูล
Language: c
Time: 0.002 second
Submitted On: 2025-10-12 19:37:44
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
int a[n];
for (int i=0; i<n; i++) scanf("%d", &a[i]);
int cnt1[n], pos[n], si[n], mxsi=0;
char bit[n][10];
char ans[n*8];
for (int i=0; i<n; i++) {
char tem[10];
pos[i]=i;
cnt1[i]=0;
int cur=0;
while (a[i] != 0) {
cnt1[i]+=a[i]%2;
char c='0'+a[i]%2;
tem[cur++] = c;
a[i]/=2;
}
int k=0;
for (int j=cur-1; j>=0; j--) {
bit[i][k++] = tem[j];
}
si[i]=k;
mxsi+=si[i];
bit[i][k]='\0';
}
for (int i=0; i<n-1; i++) {
for (int j=0; j<n-i-1; j++) {
if (cnt1[j] > cnt1[j+1]) {
int tem=cnt1[j+1];
cnt1[j+1]=cnt1[j];
cnt1[j]=tem;
tem = pos[j+1];
pos[j+1]=pos[j];
pos[j]=tem;
}
}
}
for (int i=0; i<n-1; i++) {
for (int j=0; j<n-i-1; j++) {
if (cnt1[j] == cnt1[j+1]) {
int si1=si[j], si2=si[j+1];
if (si1 < si2) {
int tem=pos[j+1];
pos[j+1]=pos[j];
pos[j]=tem;
tem=si[j+1];
si[j+1]=si[j];
si[j]=tem;
}
}
}
}
int k=0;
for (int i=n-1; i>=0; i--) {
for (int j=0; j<strlen(bit[pos[i]]); j++) {
ans[k]=bit[pos[i]][j];
k++;
}
}
ans[k]='\0';
unsigned long long tod=0;
for (int i=0; i<strlen(ans); i++) {
tod*=2;
tod+=ans[i]-'0';
}
printf("%d", tod);
}