14pts玄关求调!
查看原帖
14pts玄关求调!
1036180
ChampionCyan楼主2024/7/10 17:03
#include <bits/stdc++.h>
using namespace std;
extern "C" bool inside_shape(int x, int y);

inline int get_left_point(int x, int j) {
    int l = 1, r = j;
    while (l < r) {
        int mid = (l + r) >> 1;
        if (inside_shape(x, mid))
            r = mid;
        else
            l = mid + 1;
    }
    return l;
}

inline int get_right_point(int x, int j, int N) {
    int l = j, r = N;
    while (l < r) {
        int mid = (l + r + 1) >> 1;
        if (inside_shape(x, mid))
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}

inline int get_up_point(int x, int i) {
    int l = 1, r = i;
    while (l < r) {
        int mid = (l + r) >> 1;
        if (inside_shape(mid, x))
            r = mid;
        else
            l = mid + 1;
    }
    return l;
}

inline int get_down_point(int x, int i, int N) {
    int l = i, r = N;
    while (l < r) {
        int mid = (l + r + 1) >> 1;
        if (inside_shape(mid, x))
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}

extern "C" bool am_i_square(int N, int Q) {
    int add = N / 25;
    for (int i = 1; i <= N; i += add)
        for (int j = 1; j <= N; j += add)
            if (inside_shape(i, j)) {
                int l = get_left_point(i, j), r = get_right_point(i, j, N);
                int u = get_up_point(j, i), d = get_down_point(j, i, N);
                return r - l == d - u;
            }
}
2024/7/10 17:03
加载中...