题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1147

思路:判断每条线段,如果将要输入的线段和已经有的线段相交,则这条线段不算。

参考文章:https://blog.csdn.net/hexianhao/article/details/51254487

判断两条线段是否相交:https://www.cnblogs.com/wuwangchuxin0924/p/6218494.html

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct Node{
double x1,y1,x2,y2;
};
struct N{
int x,y;
};
int pd(Node t1,Node t2)
{
N a,b,c,d;
a.x=t1.x1;a.y=t1.y1;
b.x=t1.x2;b.y=t1.y2;
c.x=t2.x1;c.y=t2.y1;
d.x=t2.x2;d.y=t2.y2;
double u=(c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);
double v=(d.x-a.x)*(b.y-a.y)-(b.x-a.x)*(d.y-a.y);
if(u*v>) return ;
double w=(a.x-c.x)*(d.y-c.y)-(d.x-c.x)*(a.y-c.y);
double z=(b.x-c.x)*(d.y-c.y)-(d.x-c.x)*(b.y-c.y);
if(w*z>) return ;
return ;
}
const int maxn = ;
Node vc[maxn];
int vis[maxn];
int main(void)
{
int n,i,j;
while(scanf("%d",&n)&&n)
{
memset(vis,,sizeof(vis));
for(i=;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&vc[i].x1,&vc[i].y1,&vc[i].x2,&vc[i].y2);
}
int num=;
for(i=;i<n;i++)
{
for(j=i+;j<=n;j++)
{
if(pd(vc[i],vc[j]))
{
vis[i]=;num++;break;
}
}
}
num=n-num;
printf("Top sticks:");
for(j=,i=;i<=n;i++)
{
if(vis[i]==)
{
j++;
if(j==num) printf(" %d.\n",i);
else printf(" %d,",i);
}
}
}
return ;
}

hdu-1147(跨立实验)的更多相关文章

  1. 暑假集训#2 div1 J 四点直角 J - Space Invader 四点共面+跨立实验

    题意:给你四个点,判断能否先依次通过A,B两点,然后再在某个地方只进行一次直角转弯再一次经过C,D两点: #include <iostream> #include <cstdio&g ...

  2. HDU 1147 Pick-up sticks

    题解:每放一根棍子,都判断一下它与它前面的且在顶端的棍子是否相交,相交的话则将相应的棍子从解空间中除去. #include <cstdio> const double eps=1e-14; ...

  3. hdu 1147:Pick-up sticks(基本题,判断两线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. hdu 1147(线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. HDU 1147 /// 判断两线段相交

    题目大意: 给定n条线段的端点 依次放上n条线段 判断最后在最上面(不被覆盖)的线段有哪些 到当前线段后 直接与之前保存的未被覆盖的线段判断是否相交就可以了 #include <cstdio&g ...

  6. HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 判断两条线段是否有交点,我用的是跨立实验法: 两条线段分别是A1到B1,A2到B2,很显然,如果 ...

  7. hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)

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

  8. HDU - 5572 An Easy Physics Problem (计算几何模板)

    [题目概述] On an infinite smooth table, there's a big round fixed cylinder and a little ball whose volum ...

  9. HDOJ(2056)&HDOJ(1086)

    Rectangles    HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...

随机推荐

  1. vue深入了解组件——处理边界情况

    一.访问元素&组件 在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作DOM元素.不过也确实在一些情况下做这些事情是合适的. 1.1 访问根实例 在每个 new Vue 实例的子组 ...

  2. Nginx安装部署以及配置文件解析

    Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令.Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或 ...

  3. 使用github的流程

    使用github的流程 在实际项目开发中,按照如下步骤使用git进行代码管理 1.项目经理在开发之初,创建好仓库,上传项目的框架.组员分支 2.组员克隆项目框架,同步分支,按分工开发,在分支提交代码 ...

  4. 工作流和过程自动化框架 Camunda BPM

    Camunda BPM 是一个灵活的工作流和过程自动化框架,它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中.Camunda B ...

  5. overflow: scroll

    overflow: scroll在安卓5.0的情况下,不论内容是否填满屏幕,都会强制解析出滚动条,所以最好是使用overflow: auto

  6. hdoj1078(介绍记忆化搜索及其模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 思路: 这是一道典型的记忆化搜索模板题. 先介绍记忆化搜索,本质是搜索+DP. 一般说来,动态规 ...

  7. hdoj1014 互质

    Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  8. python OSError: [Errno 22] Invalid argument: 'D:\\crawle\x01.html1'

    import urllib.request file = urllib.request.open("http://www.baidu.com") data = file.read( ...

  9. Java的继承与接口

    为什么Java里面只允许单一继承,但允许实现多个接口? 1,为什么不能实现类的多继承?主要是防止多个类有相同的方法名,然而方法体不一样,子类就比较难选择了.所以java和C#不支持类的多继承2,允许具 ...

  10. Graph Coloring I(染色)

    Graph Coloring I https://www.nowcoder.com/acm/contest/203/J 题目描述 修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染 ...