Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: aomILOVEMYFRIEND

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

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-09 23:22:16

/*#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    string F="";
    cin >>n;
    vector<int> arr(n);
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    
    //fixed to เลขฐาน 2 in arr[]
    for(int i = 0;i <n;i++){
        int x = arr[i];
        string bin = "";
        if (x == 0) bin = "0";
        while(x > 0){
            bin = char('0' + x % 2) + bin; // เอาเศษ (bit) มาต่อหน้า
            x /= 2;
        }
        F+=bin;
    }
    
}*/
#include <bits/stdc++.h>
using namespace std;

#define ull unsigned long long

int n;
ull num[4];
bool used[4] = {0};

ull join_num(ull curr[4]){
    ull joined=0;int count=0;
    for(int i = 0;i < n;i++){
        int index;
        for(int j = 0;j < sizeof(curr[i]) * 8 - 1;j++){
            if(((curr[i]>>j)&1)==1){
                index=j+1;
            }
        }
        joined = joined|(curr[i]<<count);
        count+=index;
    }
    return joined;
}

ull find_max(ull curr[4], int pos){
    if(pos==n){
        return join_num(curr);
    }
    unsigned long long max=0;
    for(int i = 0;i < n;i++){
        if(!used[i]){
            used[i] = 1;
            curr[pos] = num[i];
            int get_ans = find_max(curr, pos+1);
            if(get_ans>max){
                max=get_ans;
            }
            used[i] = 0;
        }
    }
    return max;
}

int main(){
    // input
    cin>>n;
    for(int i = 0;i < n;i++)cin>>num[i];
    
    // find max answer
    ull blank[4];
    cout<<find_max(blank, 0);
    
    return 0;
}