本题交互库
查看原帖
本题交互库
313850
FutureSnow楼主2024/11/7 19:37

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;
}
2024/11/7 19:37
加载中...