链接

枚举两点(端点),循环遍历与直线相交的线段。

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. #include<vector>
  7. #include<cmath>
  8. #include<queue>
  9. #include<set>
  10. using namespace std;
  11. #define N 105
  12. #define LL long long
  13. #define INF 0xfffffff
  14. const double eps = 1e-;
  15. const double pi = acos(-1.0);
  16. const double inf = ~0u>>;
  17. struct point
  18. {
  19. double x,y;
  20. point(double x=,double y = ):x(x),y(y){}
  21. }p[N<<];
  22. struct line
  23. {
  24. point a,b;
  25. };
  26. typedef point pointt ;
  27. pointt operator -(point a,point b)
  28. {
  29. return point(a.x-b.x,a.y-b.y);
  30. }
  31. int dcmp(double x)
  32. {
  33. if(fabs(x)<eps) return ;
  34. return x<?-:;
  35. }
  36. double cross(point a,point b)
  37. {
  38. return a.x*b.y-a.y*b.x;
  39. }
  40. double xmult(point a,point b,point c)
  41. {
  42. return cross(a-c,b-c);
  43. }
  44. int dotline(point p,line l)
  45. {
  46. return (!dcmp(xmult(p,l.a,l.b)))&&(l.a.x-p.x)*(l.b.x-p.x)<eps
  47. &&(l.a.y-p.y)*(l.b.y-p.y)<eps;
  48. }
  49. double dis(point a)
  50. {
  51. return sqrt(a.x*a.x+a.y*a.y);
  52. }
  53. int Intersection( point a,point b,point c,point d )
  54. {
  55. int d1,d2;
  56. d1 = dcmp(xmult( a,c,b ));
  57. d2 = dcmp(xmult( a,d,b ));
  58. if( d1*d2==- ) return ;//规范相交
  59. if( d1==||d2== ) return ;//非规范相交
  60. return ;//不相交
  61. }
  62. int main()
  63. {
  64. int t,i,j,n,g;
  65. cin>>t;
  66. while(t--)
  67. {
  68. cin>>n;
  69. for(i= ; i <= n; i++)
  70. {
  71. scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i+n].x,&p[i+n].y);
  72. }
  73. if(n==||n==)
  74. {
  75. puts("Yes!");
  76. continue;
  77. }
  78. int flag = ;
  79. for(i = ; i <= *n; i++)
  80. {
  81. for(j = i+; j<= *n; j++)
  82. {
  83. line l1;
  84. l1.a = p[i],l1.b = p[j];
  85. if(dcmp(dis(p[i]-p[j]))==) continue;
  86. int num = ;
  87. for(g = ; g <= n ;g++)
  88. {
  89. if(Intersection(p[i],p[j],p[g],p[g+n])) num++;
  90. else break;
  91. }
  92. if(num==n)
  93. {
  94. flag = ;
  95. break;
  96. }
  97. }
  98. if(flag) break;
  99. }
  100. if(flag) puts("Yes!");
  101. else puts("No!");
  102. }
  103. return ;
  104. }

poj3304Segments(直线与多条线段相交)的更多相关文章

  1. (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)

    称号: You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...

  2. POJ 3304 Segments (直线和线段相交判断)

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7739   Accepted: 2316 Descript ...

  3. POJ 3304 Segments(计算几何:直线与线段相交)

    POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...

  4. POJ 1066 Treasure Hunt(线段相交判断)

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4797   Accepted: 1998 Des ...

  5. POJ 3304 Segments (叉乘判断线段相交)

    <题目链接> 题目大意: 给出一些线段,判断是存在直线,使得该直线能够经过所有的线段.. 解题思路: 如果有存在这样的直线,过投影相交区域作直线的垂线,该垂线必定与每条线段相交,问题转化为 ...

  6. hdu 1558 (线段相交+并查集) Segment set

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...

  7. zoj 1010 Area【线段相交问题】

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/ ...

  8. poj3304(是否存在一条直线与所有给出线段相交

    题意:给出n条线段,问你是否存在一条直线让他与所有线段相交. 思路:枚举两条直线的起点和终点做一条直线,看他是否与所有线段相交. #include<cstdio> #include< ...

  9. poj 3304 判断是否存在一条直线与所有线段相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8579   Accepted: 2608 Descript ...

随机推荐

  1. 在ecshop顶部会员信息提示区显示会员等级

    会员登陆后,在顶部会员信息提示区显示会员等级会员登陆后会在顶部出现这样的提示:您好,test2, 欢迎您回来 ! 进入用户中心 |退出现在设想在会员名后面加上“会员等级”效果如下:您好,test2,  ...

  2. 关于easyUI在子页面增加显示tabs的一个问题

    在父页面点个链接能动态看到子页面的情况太简单,请看easyUI官网:http://www.jeasyui.com/tutorial/layout/tabs2.php 现在说的是在子页面点个按钮也能触发 ...

  3. java关于StringBuffer和StringBuilder写入文件的效率问题

    StringBuffer在存储字符的时候,是有上限的,一旦达到上线就会出错,自己在项目中遇到一个从数据库中查询数据,然后写入到本地文件中 ,数据量大概有30万条,此时的效率十分的低.下面是大致的模拟该 ...

  4. JAVA基础知识之多线程——控制线程

    join线程 在某个线程中调用其他线程的join()方法,就会使当前线程进入阻塞状态,直到被join线程执行完为止.join方法类似于wait, 通常会在主线程中调用别的线程的join方法,这样可以保 ...

  5. windows下TCP服务器和客户端的实现

      服务器   1.初始化 WSAStartup(..)   2.创建Socket s = Socket ( .. )   3.绑定端口 ret = bind ( ... )   4.监听 ret = ...

  6. E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案

    转载自:http://www.cnblogs.com/eddy-he/archive/2012/06/20/2555918.html cd /var/lib/dpkg sudo mv info inf ...

  7. bzoj 2818: Gcd GCD(a,b) = 素数

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1566  Solved: 691[Submit][Status] Descript ...

  8. web错误

    “/Web”应用程序中的服务器错误. 服务器 'LD-PC' 上的 MSDTC 不可用. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误 ...

  9. AsyncTask的注意事项

    1.6之前:AsyncTask是串行的 1.6~2.3:改成了并行的,同时最多只能执行5个 从1.6开始,AsyncTask引入了线程池,支持同时执行5个异步任务,也就是说同时只能有5个线程运行,超过 ...

  10. 在WIn32程序中使用MFC的CInternetSession运行异常,主要是因为获取目前应用程序名出错的解决办法

    转载:http://group.gimoo.net/review/22564 头文件#include <afxinet.h"> 在非MFC工程中使用CInternetSessio ...