Submission #100971

#TimeUsernameProblemLanguageResultExecution timeMemory
100971square1001Question (Grader is different from the original contest) (CEOI14_question_grader)C++14
100 / 100
1885 ms78888 KiB
#include <string> #include <vector> #include <algorithm> #include <functional> using namespace std; static bool first_encode = true; int size_encode = 0; vector<vector<int> > perm_encode; int encode(int n, int x, int y) { if (first_encode) { function<int(int, int)> comb = [&](int n, int m) { int ans = 1; for (int i = 1; i <= m; ++i) { ans = (long long)(ans) * (n - m + i) / i; } return ans; }; while (comb(size_encode * 2, size_encode) <= n) ++size_encode; string perm = string(size_encode, 'o') + string(size_encode, 'x'); do { vector<int> v; for (int i = 0; i < size_encode * 2; ++i) { if (perm[i] == 'o') v.push_back(i); } perm_encode.push_back(v); } while (next_permutation(perm.begin(), perm.end())); first_encode = false; } vector<int> a = perm_encode[x]; vector<int> b = perm_encode[y]; for (int i : a) { if (find(b.begin(), b.end(), i) == b.end()) { return i + 1; } } return -1; }
#include <string> #include <vector> #include <algorithm> #include <functional> using namespace std; static bool first_decode = true; vector<vector<int> > perm_decode; int size_decode = 0; int decode(int n, int q, int h) { if (first_decode) { function<int(int, int)> comb = [&](int n, int m) { int ans = 1; for (int i = 1; i <= m; ++i) { ans = (long long)(ans) * (n - m + i) / i; } return ans; }; while (comb(size_decode * 2, size_decode) <= n) ++size_decode; string perm = string(size_decode, 'o') + string(size_decode, 'x'); do { vector<int> v; for (int i = 0; i < size_decode * 2; ++i) { if (perm[i] == 'o') v.push_back(i); } perm_decode.push_back(v); } while (next_permutation(perm.begin(), perm.end())); first_decode = false; } vector<int> a = perm_decode[q]; if (find(a.begin(), a.end(), h - 1) != a.end()) return 1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...