Submission #1240644

#TimeUsernameProblemLanguageResultExecution timeMemory
1240644hengliaoTreasure (IOI24_treasure)C++20
81 / 100
491 ms14700 KiB
#include "treasure.h"
#include<bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define pll pair<ll, ll>
#define vll vector<ll>
#define pb push_back

typedef long long ll;

const ll mxN=4e4;

vector<int> encode(vector<pair<int, int>> P) {
	ll n=P.size();
	vector<int> re;
	vll con1, con2;
	for(auto &[x, y]:P){
		con1.pb(x);
		con2.pb(y);
	}
	sort(con1.begin(), con1.end());
	sort(con2.begin(), con2.end());
	con1.erase(unique(con1.begin(), con1.end()), con1.end());
	con2.erase(unique(con2.begin(), con2.end()), con2.end());
	
	auto id1=[&](ll tar){
		return lower_bound(con1.begin(), con1.end(), tar)-con1.begin();
	};

	auto id2=[&](ll tar){
		return lower_bound(con2.begin(), con2.end(), tar)-con2.begin();
	};

	for(auto &it:con1){
		re.pb((int) it*2);
	}
	for(auto &it:con2){
		re.pb((int) it*2+1);
	}

	auto hs=[&](ll x, ll y){
		return x*mxN+y; 
	};

	for(ll i=0;i<n;i++){
		re.pb((int) hs(id1(P[i].F), id2(P[i].S)));
		re.pb((int) hs(id1(P[i].F), id2(P[i].S)));
	}

	// for(auto &it:re){
	// 	cout<<it<<' ';
	// }

	// cout<<'\n';
	return re;
}

vector<pair<int, int>> decode(vector<int> S) {
	map<ll, ll> mp;
	for(auto &it:S){
		mp[it]++;
	}
	vll con1, con2;
	for(auto &[x, y]:mp){
		if(y%2==1){
			if(x%2==0){
				con1.pb(x/2);
			}
			else{
				con2.pb(x/2);
			}
		}
	}

	vector<pair<int, int>> re;

	for(auto &[x, y]:mp){
		if(y>=2){
			ll f=x/mxN;
			ll s=x%mxN;
			re.pb({(int) con1[f], (int) con2[s]});
		}
	}

	return re;
}	


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...