hdu-1147(跨立实验)
题目链接: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(跨立实验)的更多相关文章
- 暑假集训#2 div1  J  四点直角   J - Space Invader     四点共面+跨立实验
		
题意:给你四个点,判断能否先依次通过A,B两点,然后再在某个地方只进行一次直角转弯再一次经过C,D两点: #include <iostream> #include <cstdio&g ...
 - HDU 1147 Pick-up sticks
		
题解:每放一根棍子,都判断一下它与它前面的且在顶端的棍子是否相交,相交的话则将相应的棍子从解空间中除去. #include <cstdio> const double eps=1e-14; ...
 - hdu 1147:Pick-up sticks(基本题,判断两线段相交)
		
Pick-up sticks Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
 - hdu 1147(线段相交)
		
Pick-up sticks Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
 - HDU 1147 /// 判断两线段相交
		
题目大意: 给定n条线段的端点 依次放上n条线段 判断最后在最上面(不被覆盖)的线段有哪些 到当前线段后 直接与之前保存的未被覆盖的线段判断是否相交就可以了 #include <cstdio&g ...
 - HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 判断两条线段是否有交点,我用的是跨立实验法: 两条线段分别是A1到B1,A2到B2,很显然,如果 ...
 - 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 ...
 - HDU - 5572 An Easy Physics Problem (计算几何模板)
		
[题目概述] On an infinite smooth table, there's a big round fixed cylinder and a little ball whose volum ...
 - HDOJ(2056)&HDOJ(1086)
		
Rectangles HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...
 
随机推荐
- MySQL 获取最后插入的ID LAST_INSERT_ID用法
			
LAST_INSERT_ID() 自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值. MySQL的LAST_INSERT_ID的注意事项: 第 ...
 - xcode显示行号show gutter
			
要在每一个代码编辑窗口中的边线里显示行号: 使用Xcode > Preferences 菜单命令,点击 Text Editing,然后选择Editing 然后点击选择 “Line numbers ...
 - Oracle SQL Developer在进行查询的时候只显示50条数据
			
在查询结果大于50条的时候,软件默认会只显示50条,向下拉会继续显示. 想要显示所有结果的话,光标放在结果集:ctrl+End或者是ctrl+PgDn都可以.
 - 管道限流利器pv
			
pv 是什么 可不是 page view,是pipe viewer,管道偷窥器的缩写.这个东西的源站点在google code上,需要的话可以访问pv 的官网 . 这个东西的官方手册页(man pv或 ...
 - Inteiilj IDEA 团队代码格式规范
			
目录 Intellij IDEA code format Tabs and Indents Spaces Wrapping and Braces Imports 更新 Intellij IDEA co ...
 - HTML CSS + DIV实现整体布局 part2
			
9.盒模型的层次关系 我们通过一个经典的盒模型3D立体结构图来理解,如图: 从上往下看,层次关系如下: 第1层:盒子的边框(border), 第2层:元素的内容(content).内边 ...
 - Enterprise Library 企业库
			
微软企业库,提供了一套日志,缓存等功能的库.可以通过NuGet安装.
 - 真机IOS8.3以上的文件夹共享
			
ios8.3以上的版本,苹果规定需要验证身份,将不在默认开启文件共享,但是在实际测试工作中,提取文件是经常需要做的操作,笔者在使用GT采集性能数据后,通过itoos或itunes都无法获得目标app的 ...
 - GridView,datalist添加序号列
			
GridView添加序号列:这个是经常需要的一个功能 <asp:TemplateField HeaderText="序号"> <ItemTemplate> ...
 - php5.3 延迟静态绑定 static关键字
			
//传统模式 --这段代码能很好工作,但大量的重复代码很烦人,不想为每个DomainObject子类都创建这段相同代码吧? /* abstract class DomainObject{} class ...