#include "treasure.h"
#include<bits/stdc++.h>
using namespace std;
std::vector<int> encode(std::vector<std::pair<int, int>> P) {
vector<pair<int,int>> vecX, vecY;
for(int i = 0 ; i < P.size() ; i++){
vecX.push_back(make_pair(P[i].first, i));
vecY.push_back(make_pair(P[i].second, i));
}
sort(vecX.begin(), vecX.end());
sort(vecY.begin(), vecY.end());
int finalY[vecX.size()];
for(int i = 0 ; i < (int)vecX.size() ; i++){
finalY[vecY[i].second] = i;
}
vector<int> X_ret, Y_ret, P_ret;
for(int i = 0; i< (int)vecX.size() ; i++){
X_ret.push_back(3*P[i].first+1);
Y_ret.push_back(3*P[i].second+2);
P_ret.push_back(3*(i+10000*finalY[vecX[i].second]));
assert(P_ret.back()<=2e9);
}
vector<int> re;
re.insert(re.end(),X_ret.begin(), X_ret.end());
re.insert(re.end(),Y_ret.begin(), Y_ret.end());
re.insert(re.end(),P_ret.begin(), P_ret.end());
return re;
}
std::vector<std::pair<int, int>> decode(std::vector<int> S) {
vector<int> vecX, vecY, vecP;
for(int i = 0 ; i < (int)S.size() ; i++){
if(S[i]%3 == 0){
vecP.push_back(S[i]/3);
}else if(S[i]%3 == 1){
vecX.push_back(S[i]/3);
}else{
vecY.push_back(S[i]/3);
}
}
sort(vecX.begin(), vecX.end());
sort(vecY.begin(), vecY.end());
vector<pair<int,int>> pos_nxtY;
for(int i = 0 ; i < (int)vecP.size() ; i++){
pos_nxtY.push_back(make_pair(vecP[i]%10000 , vecP[i]/10000));
}
sort(pos_nxtY.begin(), pos_nxtY.end());
vector<pair<int,int>> ans;
for(int i = 0 ; i < (int)pos_nxtY.size() ; i++){
assert(pos_nxtY[i].first == i);
ans.push_back({vecX[i], vecY[pos_nxtY[i].second]});
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |