Submission #1078523

# Submission time Handle Problem Language Result Execution time Memory
1078523 2024-08-27T19:10:49 Z someone Broken Device (JOI17_broken_device) C++14
0 / 100
2000 ms 3772 KB
#include "Annalib.h"
#include <bits/stdc++.h>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
using i64 = long long;
using namespace std;

const i64 MOD1 = 1e9 + 7, MOD2 = 1e9 + 9;

void Anna(int N, long long X, int K, int P[]) {
    vector<bool> broken(N);
    for(int i = 0; i < K; i++)
        broken[P[i]] = 1;
    
    mt19937 rng(42);
    X ^= rng();
    vector<array<int, 2>> crt[2];
    for(int i = 0; i < N/2; i++) {
        int val = rng() % MOD1;
        if(!broken[i]) crt[0].push_back({val, i});
    }
    for(int i = N/2; i < N; i++) {
        int val = rng() % MOD2;
        if(!broken[i]) crt[1].push_back({val, i});
    }

    vector<int> ans(N);
    for(int i = 0; i < 2; i++) {
        crt[i].resize(34);
        vector<array<int, 3>> pos;
        pos.reserve(1 << 18);
        int mod = (i == 0 ? MOD1 : MOD2);
        for(int mask = 0; mask < (1 << 17); mask++) {
            int sum1 = 0, sum2 = (mod - X % mod) % mod;
            for(int j = 0; j < 17; j++) if(mask & (1 << j)) {
                sum1 = (sum1 + crt[i][j][0]) % mod;
                sum2 = (sum2 + mod - crt[i][j+17][0]) % mod;
            }
            pos.push_back({sum1, 0, mask});
            pos.push_back({sum2, 17, mask});
        }
        sort(all(pos));
        for(int j = 1; j < sz(pos); j++)
            if(pos[j][1] == pos[j-1][1]) {
                for(int k = 0; k < 17; k++)
                    if(pos[j][2] & (1 << k))
                        ans[crt[i][pos[j][1] + k][1]] = 1;
                for(int k = 0; k < 17; k++)
                    if(pos[j-1][2] & (1 << k))
                        ans[crt[i][pos[j-1][1] + k][1]] = 1;
                break;
            }
    }

    for(int i = 0; i < N; i++)
        Set(i, ans[i]);
}
#include "Brunolib.h"
#include <bits/stdc++.h>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
using i64 = long long;
using namespace std;

const i64 MOD1 = 1e9 + 7, MOD2 = 1e9 + 9;

using ll = __int128;

ll euclid(ll a, ll b, ll &x, ll &y) {
	if (!b) return x = 1, y = 0, a;
	ll d = euclid(b, a % b, y, x);
	return y -= a/b * x, d;
}

ll crt(ll a, ll m, ll b, ll n) {
	if (n > m) swap(a, b), swap(m, n);
	ll x, y, g = euclid(m, n, x, y);
	assert((a - b) % g == 0); // else no solution
	x = (b - a) % n * x % n / g * m + a;
	return x < 0 ? x + m*n/g : x;
}

long long Bruno( int N, int A[] ){
    mt19937 rng(42);
    i64 xored = rng(), a = 0, b = 0;
    for(int i = 0; i < N/2; i++) {
        i64 val = rng();
        if(A[i]) a ^= val;
    }
    for(int i = N/2; i < N; i++) {
        i64 val = rng();
        if(A[i]) b ^= val;
    }

    return ((i64)crt(a, MOD1, b, MOD2)) ^ xored;
}
# Verdict Execution time Memory Grader output
1 Execution timed out 2043 ms 3516 KB Time limit exceeded
2 Execution timed out 2061 ms 3420 KB Time limit exceeded
3 Execution timed out 2015 ms 3508 KB Time limit exceeded
4 Execution timed out 2060 ms 3472 KB Time limit exceeded
5 Execution timed out 2040 ms 3520 KB Time limit exceeded
6 Execution timed out 2048 ms 3420 KB Time limit exceeded
7 Execution timed out 2029 ms 3764 KB Time limit exceeded
8 Execution timed out 2037 ms 3772 KB Time limit exceeded
9 Execution timed out 2035 ms 3512 KB Time limit exceeded
10 Execution timed out 2059 ms 3512 KB Time limit exceeded
11 Execution timed out 2064 ms 3760 KB Time limit exceeded
12 Execution timed out 2045 ms 3524 KB Time limit exceeded
13 Execution timed out 2073 ms 3508 KB Time limit exceeded
14 Execution timed out 2066 ms 3500 KB Time limit exceeded
15 Execution timed out 2015 ms 3416 KB Time limit exceeded
16 Execution timed out 2054 ms 3508 KB Time limit exceeded
17 Execution timed out 2070 ms 3420 KB Time limit exceeded
18 Execution timed out 2071 ms 3512 KB Time limit exceeded
19 Execution timed out 2040 ms 3640 KB Time limit exceeded
20 Execution timed out 2072 ms 3764 KB Time limit exceeded
21 Execution timed out 2041 ms 3672 KB Time limit exceeded
22 Execution timed out 2048 ms 3420 KB Time limit exceeded
23 Execution timed out 2033 ms 3420 KB Time limit exceeded
24 Execution timed out 2058 ms 3420 KB Time limit exceeded
25 Execution timed out 2062 ms 3512 KB Time limit exceeded
26 Execution timed out 2087 ms 3536 KB Time limit exceeded
27 Execution timed out 2043 ms 3416 KB Time limit exceeded
28 Execution timed out 2039 ms 3524 KB Time limit exceeded
29 Execution timed out 2019 ms 3516 KB Time limit exceeded
30 Execution timed out 2054 ms 3508 KB Time limit exceeded
31 Execution timed out 2033 ms 3644 KB Time limit exceeded
32 Execution timed out 2033 ms 3512 KB Time limit exceeded
33 Execution timed out 2008 ms 3416 KB Time limit exceeded
34 Execution timed out 2076 ms 3508 KB Time limit exceeded
35 Execution timed out 2019 ms 3416 KB Time limit exceeded
36 Execution timed out 2064 ms 3512 KB Time limit exceeded
37 Execution timed out 2035 ms 3416 KB Time limit exceeded
38 Execution timed out 2021 ms 3520 KB Time limit exceeded
39 Execution timed out 2037 ms 3512 KB Time limit exceeded
40 Execution timed out 2064 ms 3508 KB Time limit exceeded