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:00:23
#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;
}