Submission #1310086

#TimeUsernameProblemLanguageResultExecution timeMemory
1310086mohammadyaycmp (balkan11_cmp)C++20
91 / 100
1583 ms82612 KiB
#include "cmp.h"
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag,tree_order_statistics_node_update>
#define endl '\n'
using ll = long long;
#define pb push_back
#define pF first
#define pS second
#define SP <<' '<<
#define all(x) (x).begin(), (x).end()
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void bit_set(int addr);
int bit_get(int addr);
struct base8{
    int d3, d2, d1, d0;
};
base8 makebase8(int n) {
    base8 x;
    int p3 = 8*8*8, p2 = 8*8, p1 = 8, p0 = 1;
    for (int j=3; j>=0; j--) {
        ll p;
        int* y;
        if (j == 3) {
            p = p3;
            y = &x.d3;
        }
        else if (j == 2) {
            p = p2;
            y = &x.d2;
        }
        else if (j == 1) {
            p = p1;
            y = &x.d1;
        }
        else {
            p = p0;
            y = &x.d0;
        }

        for (int i = 7; i >= 0; i--) {
            if (p * i <= n) {
                *y = i;
                n -= p * i;
                break;
            }
        }
    }
    return x;
}
void remember(int n) {
    // 1-8 first digit, 9-16 second digit, 17-24 third digit, 25-32 last digit
    base8 x = makebase8(n);
    bit_set(x.d3+1);
    bit_set(x.d2+9);
    bit_set(x.d1+17);
    bit_set(x.d0+25);
}

int compare(int b) {
    base8 x = makebase8(b);
    if (bit_get(x.d3+1)) {
        if (bit_get(x.d2+9)) {
            if (bit_get(x.d1+17)) {
                if (bit_get(x.d0+25)) {
                    return 0;
                }
                else {
                    if(x.d0 <= 3) {
                        for (int i=x.d0-1; i>=0; i--) if (bit_get(i+25)) return 1;
                        return -1;
                    }
                    else {
                        for (int i=x.d0+1; i<=7; i++) if (bit_get(i+25)) return -1;
                        return 1;
                    }
                }
            }
            else {
                if(x.d1 <= 3) {
                    for (int i=x.d1-1; i>=0; i--) if (bit_get(i+17)) return 1;
                    return -1;
                }
                else {
                    for (int i=x.d1+1; i<=7; i++) if (bit_get(i+17)) return -1;
                    return 1;
                }
            }
        }
        else {
            if(x.d2 <= 3) {
                for (int i=x.d2-1; i>=0; i--) if (bit_get(i+9)) return 1;
                return -1;
            }
            else {
                for (int i=x.d2+1; i<=7; i++) if (bit_get(i+9)) return -1;
                return 1;
            }
        }
    }
    else {
        if(x.d3 <= 3) {
            for (int i=x.d3-1; i>=0; i--) if (bit_get(i+1)) return 1;
            return -1;
        }
        else {
            for (int i=x.d3+1; i<=7; i++) if (bit_get(i+1)) return -1;
            return 1;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...