Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: lazy

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

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-14 02:02:07

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


string tobinary(int n) {
    if (n == 0) {
        return "0";
    }
    string result = "";
    while (n > 0) {
        if (n%2 == 0) {
            result += "0";
        } else {
            result += "1";
        }
        n /= 2;
    }
    reverse(result.begin(), result.end());
    return result;
}
bool cmp(pair<int, int>& a,
        pair<int, int>& b)
{
    return a.second > b.second;
}

int toint(string s) {
    int sum = 0;
    for (int i = 0; i < s.length(); i++){
        int digit = s[i] - '0';
        sum += (digit * (pow(2,s.length() - i -1)));
    }
    return sum;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    cin >> N;


    vector<string> strings(N);
    map<int,int> ints;
    vector<int> pads(N);
    int max_l = 0;

    for (int i = 0; i<N; i++) {
        int num;

        cin >> num;

        strings[i] = tobinary(num);

        if (strings[i].length() > max_l) {
            max_l = strings[i].length();
        }

    }

    for (int i = 0; i < N; i++) {
        string s = strings[i];
        pads[i] = max_l - s.length() ;
        for (int n = 0; n < max_l - strings[i].length(); n++) {
            s += "1";
        }

        strings[i] = s;

        ints[i] = stoi(s);
    }

    vector<pair<int,int>> vec (ints.begin(), ints.end());


    sort(vec.begin(),vec.end(),cmp);
    string result = "";
    for (const auto& pair : vec) {
        string s = to_string(pair.second);
        int pad = pads[pair.first];

        for (int i = 0; i < pad; i++) {
            s.pop_back();
        }

        result += s;

    }

    cout << toint(result);
    return 0;
}