专栏文章
题解:P14433 [JOISC 2013] JOI 海报 / JOI Poster
P14433题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min9f6fg
- 此快照首次捕获于
- 2025/12/01 22:43 3 个月前
- 此快照最后确认于
- 2025/12/01 22:43 3 个月前
,很小。所以可以使用暴力枚举四个点。
使用一个函数计算 两点之间的距离,记为 。
当大圆包含小圆时,大圆的半径要大于等于小圆的半径加两圆的圆心距离,即 。这是一个判断条件。
当一个圆在地图范围内的时候,圆心的两个轴的坐标要大于等于它的半径。它的两个轴的坐标加上半径要小于等于地图两个轴上的大小。即 ,另一个圆同理。
满足这两个条件,答案就加一。
code
CPP#include<bits/stdc++.h>
using namespace std;
int x[60];
int y[60];
double jl(int a1,int a2){
int dx=x[a1]-x[a2],dy=y[a1]-y[a2];
return sqrt(dx*dx+dy*dy);
}
int main(){
int n,w,h;
cin>>n>>w>>h;
for(int i=0;i<n;i++){
cin>>x[i]>>y[i];
}
int sum=0;
for(int a=0;a<n;a++){
for(int b=0;b<n;b++){
if(a==b)continue;
for(int c=0;c<n;c++){
if(c==a||c==b)continue;
for(int d=0;d<n;d++){
if(d==a||d==b||d==c)continue;
double r1=jl(a,b),r2=jl(c,d),ac=jl(a,c);
if(r1>r2+ac+1e-9){
if(x[a]>=r1&&x[a]<=w-r1&&y[a]>=r1&&y[a]<=h-r1){
if(x[c]>=r2&&x[c]<=w-r2&&y[c]>=r2&&y[c]<=h-r2){
sum++;
}
}
}
}
}
}
}
cout<<sum;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...