Submission #1358658

#TimeUsernameProblemLanguageResultExecution timeMemory
1358658toast12Treasure (IOI24_treasure)C++20
100 / 100
157 ms5032 KiB
#include "treasure.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> encode(vector<pair<int, int>> P) {
    int n = P.size();
    vector<int> ret;
    sort(P.begin(), P.end());
    for (int i = 0; i < n; i++) ret.push_back(P[i].first);
    vector<pair<int, int>> v;
    for (int i = 0; i < n; i++) v.push_back({P[i].second, i+1});
    sort(v.begin(), v.end());
    int offset = 5e8;
    for (int i = 0; i < n; i++) ret.push_back(v[i].first+offset);
    offset = 1e9;
    for (int i = 0; i < n; i++) {
        if (i == 0) ret.push_back(v[i].second+offset);
        else ret.push_back(ret.back()+v[i].second);
    }
    return ret;
}

vector<pair<int, int>> decode(vector<int> S) {
    sort(S.begin(), S.end());
    vector<pair<int, int>> ans;
    int n = S.size()/3;
    for (int i = 0; i < n; i++) ans.push_back({S[i], 0});
    vector<int> y;
    int offset = 5e8;
    for (int i = n; i < 2*n; i++) y.push_back(S[i]-offset);
    vector<int> idx;
    offset = 1e9;
    idx.push_back(S[2*n]-offset);
    for (int i = 2*n+1; i < S.size(); i++) idx.push_back(S[i]-S[i-1]);
    for (int i = 0; i < n; i++) 
        ans[idx[i]-1].second = y[i];
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...