P1652 圆
大意:
给出 n 个圆,保证任意两个圆都不相交。
然后给出两个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x1,y1),(x2,y2) (x1,y1),(x2,y2),保证均不在某个圆上,要从 ( x 1 , y 1 ) → ( x 2 , y 2 ) (x1,y1)→(x2,y2) (x1,y1)→(x2,y2)画条曲线,问这条曲线最少穿过多少次圆的边界?
思路:
因为是画曲线,而且任意两个圆都不相交,所以只要两个点不是分别在不同的圆里面,都有办法找到一条曲线绕过所有的圆,所以只需要判断,对于每个圆,是否两个点分别属于圆内和圆外即可
#include<bits/stdc++.h>
using namespace std;
double dis(int x1,int y1,int x2,int y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main(){
int x1,y1,x2,y2,ans=0;
int y[105][3],n;
cin>>n;
for(int i=0;i<3;i++)
for(int j=0;j<n;j++)
cin>>y[j][i];
cin>>x1>>y1>>x2>>y2;
for(int i=0;i<n;i++)
if(dis(x1,y1,y[i][0],y[i][1])<y[i][2]!=dis(x2,y2,y[i][0],y[i][1])<y[i][2]) ans++;
cout<<ans<<endl;
return 0;
}
P2181 对角线
大意:
对于一个 nnn 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
思路:
找规律题…
#include<bits/stdc++.h>
long long a1[100000];
long long a2[100000];
long long a3[100000];
int main()
{