#include <bits/stdc++.h>
#include "squarerect.h"
//#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;
bool am_i_square(int N, int Q) {
int used = 0;
int mn = (N * N + 24) / 25;
int ms = (int)ceil(sqrt(mn));
int x = N, y = N;
bool found = false;
for (int i = ms; i <= N and !found; i += ms) {
for (int j = ms; j < i and !found; j += ms) {
if (used++, inside_shape(i, j)) {
x = i; y = j;
found = true;
break;
}
if (used++, inside_shape(j, i)) {
x = j; y = i;
found = true;
break;
}
}
if (found) break;
if (N < i + ms) break;
if (used++, inside_shape(i, i)) {
x = i; y = i;
found = true;
break;
}
}
int l = x - ms + 1, r = min(x, N - ms + 2);
while (l < r) {
int mid = l + (r - l) / 2;
if (used++, inside_shape(mid, y)) r = mid;
else l = mid + 1;
}
x = l;
if (N < x + ms - 1) return false;
l = y - ms + 1, r = min(y, N - ms + 2);
while (l < r) {
int mid = l + (r - l) / 2;
if (used++, inside_shape(x, mid)) r = mid;
else l = mid + 1;
}
y = l;
if (N < y + ms - 1) return false;
l = ms - 1;
r = min(N - x, N - y) + 1;
while (l < r) {
int mid = l + (r - l) / 2;
if (used++, !inside_shape(x + mid, y + mid)) r = mid;
else l = mid + 1;
}
int side = l;
bool valid = side != ms - 1;
if (valid and x + side - 1 <= N and y + side <= N)
valid &= !inside_shape(x + side - 1, y + side);
if (valid and x + side <= N and y + side - 1 <= N)
valid &= !inside_shape(x + side, y + side - 1);
return valid;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |