0%

CF-1009-D. Counting Points

思路讲解

其实不难,挺简单的。

我的思路是由于限制了半径的大小的总和,所以说可以把每个圆的每个x都扫一遍,扫到这个x了这个圆在这个x上包含了几个点就很容易知道了。然后把x上有多少个点被包含存在Cnt里就好了,最后扫一遍加起来就好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FOR(i,1,N){
ll r=xr[i][1],x=xr[i][0];
FOR(j,x-r,x+r){
ll len=abs(j-x);
ll yCanChoose=sqrtl(r*r-len*len);
yCanChoose*=2,yCanChoose+=1;
if(Cnt.find(j)==Cnt.end()){
Cnt[j]=yCanChoose;
}else{
Cnt[j]=max(yCanChoose,Cnt[j]);
}
}
}
ll ans=0;
for(auto ele:Cnt){
ans+=ele.se;
}

AC代码

https://codeforces.com/contest/2074/submission/318915158

心路历程(WA,TLE,MLE……)