• POJ3304+几何


    题意:给定一些点,问是否能找到一条直线,使得这条直线与所有的线段都有交点

    因为n很小,所以可以枚举。

    当某条线段的两点在“直线”的一侧时,即不合题意。。。。

    View Code
     1 /*
     2 几何+判断直线与线段相交
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 //#include<map>
    11 #include<math.h>
    12 using namespace std;
    13 typedef long long ll;
    14 //typedef __int64 int64;
    15 const int maxn = 205;
    16 const int inf = 0x7fffffff;
    17 const double pi=acos(-1.0);
    18 const double eps = 1e-8;
    19 struct Point {
    20     double x,y;
    21 };
    22 Point point[ maxn ];
    23 int n;
    24 
    25 int sig( double d ){
    26     if( d>eps ) return 1;
    27     if( d<-eps ) return -1;
    28     return 0;
    29 }
    30 
    31 double xmult( Point sp,Point ep,Point op ){
    32     return ( sp.x-op.x )*( ep.y-op.y )-( sp.y-op.y )*( ep.x-op.x );
    33 }
    34 
    35 int Intersection( Point a,Point b,Point c,Point d ){
    36     int d1,d2;
    37     d1 = sig(xmult( a,c,b ));
    38     d2 = sig(xmult( a,d,b ));
    39     if( d1*d2==-1 ) return 1;//规范相交
    40     if( d1==0||d2==0 ) return 2;//非规范相交
    41     return 0;//不相交
    42 }
    43 bool test( Point a,Point b ){
    44     if( sig(a.x-b.x)==0&&sig(a.y-b.y)==0 )
    45         return false;//排除序相同的点
    46     for( int i=1;i<2*n;i+=2 ){
    47         if( Intersection( a,b,point[i],point[i+1] )==0 )
    48             return false;
    49     }
    50     return true;
    51 }
    52 bool solve( ){
    53     for( int i=1;i<2*n;i++ ){
    54         for( int j=i+1;j<=2*n;j++ ){
    55             if( test(point[i],point[j])==true )
    56                 return true;
    57         }
    58     }
    59     return false;
    60 }
    61 int main(){
    62     int ca;
    63     scanf("%d",&ca);
    64     while( ca-- ){
    65         scanf("%d",&n);
    66         for( int i=1;i<=2*n;i++ ){
    67             scanf("%lf%lf",&point[ i ].x,&point[ i ].y);
    68         }
    69         if( solve()==true )
    70             printf("Yes!\n");
    71         else
    72             printf("No!\n");
    73     }
    74     return 0;
    75 }
    keep moving...
  • 相关阅读:
    中间件简单
    typeof + instanceof+toString+constructor什么推理javascript数据类型
    向西项目管理工具Maven一片
    cocos2d-x3.x 设计与实现弹出对话框
    一个IIS网站的异常配置的安全解决方案
    零基Github Page个人博客建立教程无限的自由流动
    分析RAC下一个SPFILE整合的三篇文章的文件更改
    HTML5使用和实战分析HTML5 WebSocket API
    调用系统相机和图库,裁剪图片
    本地图片选择(打开媒体库,选择图片)
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2984910.html
Copyright © 2020-2023  润新知