rt,测过满数据,在时限和空限范围内。
#include <bits/stdc++.h>
#include "testlib.h"
using namespace std;
extern std::vector<int> Encode(int n, int k, std::vector<int> T);
extern std::vector<int> Decode(int n, int k, std::vector<int> R);
const int mx = 300010;
mt19937 rd(0);
pair<int, set<int> > dat[mx];
vector<int> vec[mx], res[mx];
int p[mx];
int main (int argc, char **argv){
registerInteraction(argc, argv);
int tp = inf.readInt(), T = inf.readInt();//assert(0);
for(int cas = 1; cas <= T; cas++){
int n = inf.readInt(), k = inf.readInt();
dat[cas].first = n;
for(int i = 0; i < k; i++){
int x = inf.readInt();
dat[cas].second.insert(x);
}
p[cas] = cas;
}
for(int cas = 1; cas <= T; cas++){
vector<int> v;
v.clear();
for(auto i : dat[cas].second) v.push_back(i);
vec[cas] = Encode(dat[cas].first, v.size(), v);
for(auto i : vec[cas]) if(dat[cas].second.count(i)) quitf(_wa, "subtest %d. Number %d appears both in input and output", cas, i);
if(!is_sorted(vec[cas].begin(), vec[cas].end())) quitf(_wa, "subtest %d. Output is not sorted", cas);
if(vec[cas].size() != v.size()) quitf(_wa, "subtest %d. Output contains same numbers", cas);
}
shuffle(p + 1, p + 1 + T, rd);
for(int cas = 1; cas <= T; cas++){
int u = p[cas];
res[u] = Decode(dat[u].first, vec[u].size(), vec[u]);
set<int> se;
se.clear();
for(auto i : res[u]) se.insert(i);
if(se != dat[u].second) quitf(_wa, "subtest %d. Wrong", cas);
}
quitf(_ok, "Accepted");
return 0;
}