제출 #836454

#제출 시각아이디문제언어결과실행 시간메모리
836454TB_Unscrambling a Messy Bug (IOI16_messy)C++17
49 / 100
1 ms384 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define deb(x) cout << #x << " = " << x << endl
#define deb2(x, y) cout << #x << " = " << x << ", " << #y << " = " << y << endl
#define fo(i, n) for(ll i = 0; i<(n); i++)
#define pb push_back
#define F first
#define S second

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<ll, ll> pl;
typedef vector<pl> vpl;

void add_element(std::string x);
bool check_element(std::string x);
void compile_set();

std::vector<int> restore_permutation(int n, int w, int r) {
    string toAdd(n, '0');
    fo(i, n){
        toAdd[n-1-i] = '1';
        add_element(toAdd);
    }
    compile_set();
    string current(n, '0');
    mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
    vi ans(n, -1);
    fo(i, n){
        vi seen(n, 0);
        while(true){
            int pos = rnd()%n;
            if(current[pos] == '1' || seen[pos]) continue;
            seen[pos] = 1;
            current[pos] = '1';
            if(check_element(current)){
                ans[pos] = n-1-i;
                break;
            }
            current[pos] = '0';
        }
    }
    return ans;
}





// namespace helper {

//     set<string> set_;
//     bool compiled = false;
//     int n;
//     vector<int> p;
//     int w;
//     int r;

//     int read_int() {
//         int x;
//         cin >> x;
//         return x;
//     }

// }

// using namespace helper;


// // A convenience function.
// int get_p(int i) {
//     int ret = p[i];
//     return ret;
// }

// int main() {
//     n = read_int();
//     w = read_int();
//     r = read_int();
//     p = vector<int>(n);
//     for (int i = 0; i < n; i++) {
//         p[i] = read_int();
//     }
//     vector<int> answer = restore_permutation(n, w, r);
    
//     if (answer.size() != n) {
//         printf("WA\n");
//         return 0;
//     }


//     printf("%d", answer[0]);

//     for (int i = 1; i < n; i++) {
//         printf(" %d", answer[i]);
//     }
//     printf("\n");
//     return 0;
// }

// void wa() {
//     printf("WA\n");
//     exit(0);
// }

// bool check(const string& x) {
//     if ((int)x.length() != n) {
//         return false;
//     }
//     for (int i = 0; i < n; i++) {
//         if (x[i] != '0' && x[i] != '1') {
//             return false;
//         }
//     }
//     return true;
// }

// void add_element(string x) {
//     if (--w < 0 || compiled || !check(x)) {
//         wa();
//     }
//     set_.insert(x);
// }

// bool check_element(string x) {
//     if (--r < 0 || !compiled || !check(x)) {
//         wa();
//     }
//     return set_.count(x);
// }

// void compile_set() {
//     if (compiled) {
//         wa();
//     }
//     compiled = true;
//     set<string> compiledSet;
//     string compiledElement = string(n, ' ');
//     for (set<string>::iterator it = set_.begin(); it != set_.end(); it++) {
//         string s = *it;
//         for (int i = 0; i < n; i++) {
//             compiledElement[i] = s[get_p(i)];
//         }
//         compiledSet.insert(compiledElement);
//     }
//     set_ = compiledSet;
// }

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