Submission #1142257

#TimeUsernameProblemLanguageResultExecution timeMemory
1142257SulAcmp (balkan11_cmp)C++20
100 / 100
1316 ms104392 KiB
#include "cmp.h"
#include <iostream>
#include <string>
using namespace std;

int cum[7];

//string quat(int n) {
//    string s(6, '0');
//    for (int i = 0; i < 6; i++)
//        s[i] += (n >> i*2) & 3;
//    reverse(s.begin(), s.end());
//    return s;
//}

void remember(int a) {
    cum[0] = 1;
    for (int i = 1; i < 7; i++) {
        cum[i] = cum[i-1] + (1 << (14 - 2*i)) + 500;
    }
    for (int i = 0; i < 6; i++) {
        bit_set(cum[i] + (a >> i*2));
//        cout << quat((a >> i*2)) << '\n';
    }
//    cout<<'\n';
}

int compare(int b) {
#define f(i) bit_get(cum[i] + (b >> i*2))
    int ans;
    int l = -1, r = 6;
    while (l+1 < r) {
        int mid = (l+r)/2;
        if (f(mid)) r = mid;
        else l = mid;
    }
    if (l == -1) return 0;
    b >>= 2*l;
    if (b % 4 == 0) ans = -1;
    if (b % 4 == 1) ans = bit_get(b + cum[l] - 1) ? 1 : -1;
    if (b % 4 == 2) ans = bit_get(b + cum[l] + 1) ? -1 : 1;
    if (b % 4 == 3) ans = 1;
    return ans;
//    short l = 0, r = 7;
//    while (l+1 < r) {
//        short mid = (l+r)/2;
//        cout << mid << ' ' << quat((b >> mid*2)) << ' '<< bit_get(cum[mid] + (b >> mid*2))<< '\n';
//        if (bit_get(cum[mid] + (b >> mid*2))) {
//            r = mid;
//        } else {
//            l = mid;
//        }
//    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...