Submission #990666

# Submission time Handle Problem Language Result Execution time Memory
990666 2024-05-31T00:45:04 Z efishel Broken Device (JOI17_broken_device) C++17
100 / 100
36 ms 2748 KB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector <ll>;

static mt19937_64 rngA(0xccff00);

void Anna (int n, ll x, int k, int p[]) {
    vll to(n);
    iota(to.begin(), to.end(), 0);
    shuffle(to.begin(), to.end(), rngA);
    vector <char> broken(n, false);
    for (ll i : vll(p, p+k)) broken[to[i]] = true;
    vll th(38, -15);
    for (ll i = 0; i < 38; i++) {
        th[i] = x%3;
        x /= 3;
    }
    // 00 none
    // 01 0
    // 10 1
    // 11 2
    ll at = 0;
    ll i = 0;
    vll set(n, 0);
    for (; i < n; i += 2) {
        if (at == 38) break;
        switch (th[at]) {
            case 0:
            if (broken[i+1]) break;
            set[i] = 0;
            set[i+1] = 1;
            at++;
            break;
            case 1:
            if (broken[i]) break;
            set[i] = 1;
            set[i+1] = 0;
            at++;
            break;
            case 2:
            if (broken[i] || broken[i+1]) break;
            set[i] = 1;
            set[i+1] = 1;
            at++;
            break;
            default:
            assert(false);
        }
    }
    for (ll i = 0; i < n; i++) {
        Set(i, set[to[i]]);
    }
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector <ll>;

static mt19937_64 rngB(0xccff00);

ll Bruno (int n, int a[]) {
    vll orig(a, a+n);
    vll to(n);
    iota(to.begin(), to.end(), 0);
    shuffle(to.begin(), to.end(), rngB);
    vll ve(n);
    for (ll i = 0; i < n; i++) ve[to[i]] = orig[i];
    vll th(38);
    ll at = 0;
    for (ll i = 0; i < n; i += 2) {
        if (at == 38) break;
        if (ve[i] == 0 && ve[i+1] == 0) continue;
        th[at++] = (
            ve[i] == 0 && ve[i+1] == 1 ? 0 :
            ve[i] == 1 && ve[i+1] == 0 ? 1 :
            ve[i] == 1 && ve[i+1] == 1 ? 2 : -15
        );
    }
    ll ans = 0;
    ll thr = 1;
    for (ll i = 0; i < 38; i++) {
        ans += th[i]*thr;
        thr *= 3;
    }
    cerr << ans << " ans\n";
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 27 ms 2404 KB Output is correct - L* = 40
2 Correct 26 ms 2392 KB Output is correct - L* = 40
3 Correct 27 ms 2588 KB Output is correct - L* = 40
4 Correct 27 ms 2392 KB Output is correct - L* = 40
5 Correct 26 ms 2396 KB Output is correct - L* = 40
6 Correct 27 ms 2408 KB Output is correct - L* = 40
7 Correct 26 ms 2564 KB Output is correct - L* = 40
8 Correct 36 ms 2452 KB Output is correct - L* = 40
9 Correct 26 ms 2400 KB Output is correct - L* = 40
10 Correct 26 ms 2648 KB Output is correct - L* = 40
11 Correct 25 ms 2392 KB Output is correct - L* = 40
12 Correct 25 ms 2404 KB Output is correct - L* = 40
13 Correct 28 ms 2396 KB Output is correct - L* = 40
14 Correct 26 ms 2500 KB Output is correct - L* = 40
15 Correct 26 ms 2404 KB Output is correct - L* = 40
16 Correct 26 ms 2664 KB Output is correct - L* = 40
17 Correct 27 ms 2748 KB Output is correct - L* = 40
18 Correct 26 ms 2648 KB Output is correct - L* = 40
19 Correct 26 ms 2404 KB Output is correct - L* = 40
20 Correct 25 ms 2436 KB Output is correct - L* = 40
21 Correct 26 ms 2392 KB Output is correct - L* = 40
22 Correct 25 ms 2396 KB Output is correct - L* = 40
23 Correct 35 ms 2744 KB Output is correct - L* = 40
24 Correct 26 ms 2612 KB Output is correct - L* = 40
25 Correct 26 ms 2400 KB Output is correct - L* = 40
26 Correct 30 ms 2396 KB Output is correct - L* = 40
27 Correct 25 ms 2396 KB Output is correct - L* = 40
28 Correct 27 ms 2404 KB Output is correct - L* = 40
29 Correct 28 ms 2376 KB Output is correct - L* = 40
30 Correct 27 ms 2404 KB Output is correct - L* = 40
31 Correct 27 ms 2392 KB Output is correct - L* = 40
32 Correct 26 ms 2396 KB Output is correct - L* = 40
33 Correct 25 ms 2648 KB Output is correct - L* = 40
34 Correct 26 ms 2504 KB Output is correct - L* = 40
35 Correct 26 ms 2396 KB Output is correct - L* = 40
36 Correct 26 ms 2384 KB Output is correct - L* = 40
37 Correct 31 ms 2500 KB Output is correct - L* = 40
38 Correct 26 ms 2368 KB Output is correct - L* = 40
39 Correct 25 ms 2476 KB Output is correct - L* = 40
40 Correct 28 ms 2504 KB Output is correct - L* = 40