为什么我过不了?
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read()
{
ll x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=x*10ll+c-'0',c=getchar();
return x;
}
const int QAQ=100001;
bool ok[QAQ],ans[QAQ];
int n,vis[QAQ],cnt,hao[QAQ];
ll x[QAQ],y[QAQ],r,len;
map<pair<ll,ll>,int> cun;
#define mk make_pair
int id(int x,int y) {if(cun[mk(x/len+1,y/len+1)]) return cun[mk(x/len+1,y/len+1)];return cun[mk(x/len+1,y/len+1)]=++cnt;}
int id2(int x,int y) {return cun[mk(x/len+1,y/len+1)];}
vector<int> dian[QAQ],to[QAQ];
bool dfs(int x,int se)
{
if(vis[x]!=0) return (vis[x]!=se);
vis[x]=se;
for(int i=0;i<(int)to[x].size();i++)
{
int v=to[x][i];
if(dfs(v,-se)) return 1;
}
return 0;
}
void chuli(int x)
{
if(ok[x]) return ;
ok[x]=1,ans[x]=1;
for(int i=0;i<(int)to[x].size();i++) chuli(to[x][i]);
}
ll dis(int o1,int o2) {return (x[o1]-x[o2])*(x[o1]-x[o2])+(y[o1]-y[o2])*(y[o1]-y[o2]);}
signed main()
{
n=read(),r=read(),len=r*0.7;
for(int i=1;i<=n;i++) x[i]=read(),y[i]=read(),hao[i]=id(x[i],y[i]),dian[hao[i]].push_back(i);
for(int i=1;i<=n;i++)
if(dian[hao[i]].size()<=2)
for(ll o1=x[i]-len*2;o1<=x[i]+len*2;o1+=len)
for(ll o2=y[i]-len*2;o2<=y[i]+len*2;o2+=len)
{
if(!cun.count(mk(o1/len+1,o2/len+1))) continue;
int nw=id2(o1,o2);
if(dian[nw].size()<=2)
for(int j=0;j<(int)dian[nw].size();j++)
{
int v=dian[nw][j];
if(v!=i&&dis(i,v)<=r*r) to[i].push_back(v);
}
else if(ans[i]==0)
for(int j=0;j<(int)dian[nw].size();j++)
if(dis(i,dian[nw][j])<=r*r) ans[i]=1;
}
else ans[i]=1;
for(int i=1;i<=n;i++) if(ans[i]==1) chuli(i);
for(int i=1;i<=n;i++) if(ans[i]==0&&vis[i]==0) if(dfs(i,1)) chuli(i);
for(int i=1;i<=n;i++) putchar(ans[i]?'1':'0');
return 0;
}