CF #284 div2 C

来源:互联网 发布:皇冠接水程序源码论坛 编辑:程序博客网 时间:2024/06/10 03:55

题意:n条直线将平面划分成多个块,有两个点,每个点都在块中,不在直线上,问一个点到另一个点最少跨越多少条直线。

思路:判断两个点是否在直线的两侧。即D=Ax+Bx+C>0是否一样。

/*I have given up the treatment-_-||*/#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<cstdlib>#include<queue>#include<algorithm>#include<map>using namespace std;typedef long long LL;const int maxn=110;const int maxm=110;const int inf=1e8;const int mod=10000;int n,m;int k;double a[maxn],b[maxn],c[maxn];int main(){    //freopen ("in.txt" , "r" , stdin);    //freopen ("output.txt" , "w" , stdout);    int i,j;    double x1,y1,x2,y2;    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);    scanf("%d",&n);    for(i=1;i<=n;i++){        scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);    }    int ans=0;    for(i=1;i<=n;i++){        int u=(a[i]*x1+b[i]*y1+c[i])>0;        int v=(a[i]*x2+b[i]*y2+c[i])>0;        if(u!=v) ans++;    }    printf("%d\n",ans);    return 0;}


0 0