Submission #600905

# Submission time Handle Problem Language Result Execution time Memory
600905 2022-07-21T09:00:35 Z MohamedAliSaidane Unscrambling a Messy Bug (IOI16_messy) C++14
38 / 100
1 ms 340 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include "messy.h"

        using namespace std;
        using namespace __gnu_pbds;


        ///#define int long long

        typedef tree<int,null_type,less<int>,rb_tree_tag,
        tree_order_statistics_node_update> indexed_set;

        typedef long long ll;

        typedef pair<int,int> pii;
        typedef pair<ll,ll> pll;

        typedef vector<int> vi;
        typedef vector<ll> vll;
        typedef vector<pii> vpi;
        typedef vector<pll> vpl;

        #define ff first
        #define ss second

        #define pb push_back
        #define popb pop_back
        #define all(x) (x).begin(),(x).end()

        vi restore_permutation(int n, int w, int r);
        /*
        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;
        }
        */
        std::vector<int> restore_permutation(int n, int w, int r)
        {
            string cur = "";
            for(int i = 0; i < n; i++)
                cur += '1';
            for(int i = 0; i < n; i++)
            {
                cur[i] =  '0';
                add_element(cur);
            }
            compile_set();
            string ans = "";
            set<int> rem;
            for(int i = 0; i< n;i ++)
                rem.insert(i);
            for(int i=  0 ; i <n ;i ++)
                ans += '1';
            vi p(n);
            for(int i = 0; i < n;i ++)
            {
                int cor;
                for(auto e: rem)
                {
                    ans[e] = '0';
                    if(check_element(ans))
                    {
                        cor =e;
                        break;
                    }
                    ans[e] = '1';
                }
                //cout << cor << '\n';
                rem.erase(cor);
                p[cor] = i;
            }
            return p;
        }

Compilation message

messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:165:22: warning: 'cor' may be used uninitialized in this function [-Wmaybe-uninitialized]
  165 |                 p[cor] = i;
      |                      ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 8
2 Correct 0 ms 212 KB n = 8
3 Correct 1 ms 212 KB n = 8
4 Correct 1 ms 212 KB n = 8
5 Correct 0 ms 212 KB n = 8
6 Correct 0 ms 212 KB n = 8
7 Correct 0 ms 212 KB n = 8
8 Correct 0 ms 212 KB n = 8
9 Correct 0 ms 212 KB n = 8
10 Correct 0 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 32
2 Correct 0 ms 212 KB n = 32
3 Correct 0 ms 212 KB n = 32
4 Correct 1 ms 212 KB n = 32
5 Correct 0 ms 212 KB n = 32
6 Correct 0 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 0 ms 212 KB n = 32
10 Correct 1 ms 212 KB n = 32
11 Correct 0 ms 212 KB n = 32
12 Correct 0 ms 212 KB n = 32
13 Correct 0 ms 212 KB n = 32
14 Correct 0 ms 212 KB n = 32
15 Correct 0 ms 212 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 32
2 Correct 0 ms 212 KB n = 32
3 Incorrect 1 ms 212 KB grader returned WA
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 340 KB grader returned WA
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 340 KB grader returned WA
2 Halted 0 ms 0 KB -