#include "squarerect.h" // provided header
#include <cstdlib> // for srand, rand
extern bool inside_shape(int,int);
bool am_i_square(int n,int q){
if(q>50){
int i=0,x=-1,y=-1;
srand(74231);
while(i<q/2){
int a = rand()%n + 1;
int b = rand()%n + 1;
if(inside_shape(a,b)){ x=a; y=b; break; }
i++;
}
if(x<0){
for(int a=1; a<=n && i<q/2; a+=5)
for(int b=1; b<=n && i<q/2; b+=5){
if(inside_shape(a,b)){ x=a; y=b; break; }
i++;
}
}
if(x<0) x = y = 1;
int l=x,r=x,u=y,d=y;
while(i<q && l>1){
if(inside_shape(l-1,y)) l--; else break;
i++;
}
while(i<q && r<n){
if(inside_shape(r+1,y)) r++; else break;
i++;
}
while(i<q && u>1){
if(inside_shape(x,u-1)) u--; else break;
i++;
}
while(i<q && d<n){
if(inside_shape(x,d+1)) d++; else break;
i++;
}
return (r-l)==(d-u);
} else {
int c=(n+1)/2, s=(n+10)/11, p=c, o=c;
for(int i=1;i<=10;i++){
int t = i*s;
if(t>n) t = n;
if(inside_shape(c,t)){ p=c; o=t; break; }
}
int l=1, r=p, m;
while(l<r){
m=(l+r)/2;
if(inside_shape(m,o)) r=m; else l=m+1;
}
int f=l;
l=p; r=n;
while(l<r){
m=(l+r+1)/2;
if(inside_shape(m,o)) l=m; else r=m-1;
}
int g=l;
int u=1, d=o;
l=1; r=o;
while(l<r){
m=(l+r)/2;
if(inside_shape(p,m)) r=m; else l=m+1;
}
int h=l;
l=o; r=n;
while(l<r){
m=(l+r+1)/2;
if(inside_shape(p,m)) l=m; else r=m-1;
}
int k=l;
return (g-f)==(k-h);
}
}
# | 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... |