POJ2653:Pick-up sticks(线段相交)
题目:http://poj.org/problem?id=2653
题意:题意很简单,就是在地上按顺序撒一对木棒,看最后有多少是被压住的,输出没有被压住的木棒的序号。(有点坑的就是没说清楚木棒怎么算压住,也不知道是不是规范相交。)
分析:
我的代码是规范相交的情况,怎么说呢这题的数据有点水,我搜了别人的代码,他们都写的是包括不规范相交的情况。不规范相交已补,包括顶点相交
代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-9
typedef long long ll;
using namespace std;
int n;
struct Point
{
double x,y;
};
struct Line
{
Point a,b;
} line[];
double xmult(Point p1,Point p2,Point p)
{
return (p1.x-p.x)*(p2.y-p.y)-(p2.x-p.x)*(p1.y-p.y);
}
bool isIntersected(Line u,Line v)
{
return (max(u.a.x,u.b.x)>=min(v.a.x,v.b.x))&&(max(v.a.x,v.b.x)>=min(u.a.x,u.b.x))
&&(max(u.a.y,u.b.y)>=min(v.a.y,v.b.y))&&(max(v.a.y,v.b.y)>=min(u.a.y,u.b.y))&&
(xmult(u.a,v.a,u.b)*xmult(u.a,u.b,v.b)>eps)&&(xmult(v.a,u.a,v.b)*xmult(v.a,v.b,u.b)>eps);
}
int main()
{
int cnt[],tt;
bool ff;
while(scanf("%d",&n)!=EOF&&n!=)
{
tt=;
for(int i=; i<n; i++)
{
scanf("%lf%lf%lf%lf",&line[i].a.x,&line[i].a.y,&line[i].b.x,&line[i].b.y);
}
for(int i=; i<n; i++)
{
ff=false;
for(int j=i+; j<n; j++)
{
if(isIntersected(line[i],line[j]))
{
ff=true;
break;
}
}
if(ff) continue;
cnt[tt++]=i+;
}
printf("Top sticks: ");
for(int i=; i<tt-; i++)
printf("%d, ",cnt[i]);
printf("%d.\n",cnt[tt-]);
}
return ;
}
不规范相交。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <queue>
#define inf 0x3f3f3f3f
#define eps 1e-9
typedef long long ll;
using namespace std;
int n;
struct Point
{
double x,y;
};
struct Line
{
Point a,b;
} line[];
double xmult(Point p1,Point p2,Point p)
{
return (p1.x-p.x)*(p2.y-p.y)-(p2.x-p.x)*(p1.y-p.y);
}
bool isIntersected(Line u,Line v)
{
return (max(u.a.x,u.b.x)>=min(v.a.x,v.b.x))&&(max(v.a.x,v.b.x)>=min(u.a.x,u.b.x))
&&(max(u.a.y,u.b.y)>=min(v.a.y,v.b.y))&&(max(v.a.y,v.b.y)>=min(u.a.y,u.b.y))&&
(xmult(v.a,v.b,u.a)*xmult(v.a,v.b,u.b)<=)&&(xmult(u.a,u.b,v.b)*xmult(u.a,u.b,v.a)<=); }
int main()
{
int cnt[],tt;
bool ff;
while(scanf("%d",&n)!=EOF&&n!=)
{
tt=;
for(int i=; i<n; i++)
{
scanf("%lf%lf%lf%lf",&line[i].a.x,&line[i].a.y,&line[i].b.x,&line[i].b.y);
}
for(int i=; i<n; i++)
{
ff=false;
for(int j=i+; j<n; j++)
{
if(isIntersected(line[i],line[j]))
{
ff=true;
break;
}
}
if(ff) continue;
cnt[tt++]=i+;
}
printf("Top sticks: ");
for(int i=; i<tt-; i++)
printf("%d, ",cnt[i]);
printf("%d.\n",cnt[tt-]);
}
return ;
}
POJ2653:Pick-up sticks(线段相交)的更多相关文章
- POJ 2653 Pick-up sticks(线段相交)
题意:给定n个木棍依次放下,要求最终判断没被覆盖的木棍是哪些. 思路:快速排斥以及跨立实验可以判断线段相交. #include<algorithm> #include<cstdio& ...
- POJ 2653 Pick-up sticks [线段相交 迷之暴力]
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 12861 Accepted: 4847 D ...
- POJ2653 Pick-up sticks 判断线段相交
POJ2653 判断线段相交的方法 先判断直线是否相交 再判断点是否在线段上 复杂度是常数的 题目保证最后答案小于1000 故从后往前尝试用后面的线段 "压"前面的线段 排除不可能 ...
- POJ 2653 Pick-up sticks(判断线段相交)
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7699 Accepted: 2843 De ...
- POJ2653判断线段相交
POJ2653 题目大意:按顺序放木棒,问最后所有的木棒中上面没有木棒的木棒的索引是…… 思路:按理说线段相交的题目做的听多了,这个应该不算新鲜,但是这个题,还是让我学到了认真读题,面对这个题很容易想 ...
- POJ 2653 Pick-up sticks (线段相交)
题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...
- POJ 2653 Pick-up sticks【线段相交】
题意:n根木棍随意摆放在一个平面上,问放在最上面的木棍是哪些. 思路:线段相交,因为题目说最多有1000根在最上面.所以从后往前处理,直到木棍没了或者最上面的木棍的总数大于1000. #include ...
- 【POJ 2653】Pick-up sticks 判断线段相交
一定要注意位运算的优先级!!!我被这个卡了好久 判断线段相交模板题. 叉积,点积,规范相交,非规范相交的简单模板 用了“链表”优化之后还是$O(n^2)$的暴力,可是为什么能过$10^5$的数据? # ...
- 简单几何(线段相交) POJ 2653 Pick-up sticks
题目传送门 题意:就是小时候玩的一种游戏,问有多少线段盖在最上面 分析:简单线段相交,队列维护当前最上的线段 /******************************************** ...
- POJ - 2653 - Pick-up sticks 线段与线段相交
判断线段与线段相交 莫名其妙的数据量 #include <iostream> #include <cstdio> #include <vector> #includ ...
随机推荐
- 使用jQuery模拟Google的自动提示效果
注意: 1.本功能使用SqlServler2000中的示例数据库Northwind,请打SP3或SP4补丁:2.请下载jQuery组件,河西FTP中有下载:3.本功能实现类似Google自动提示的效果 ...
- 关于VS2013的安装遇到的问题
老师突然说实验一需要用代码实现,我之前配置的cocos的编程环境是cocos+VS2013,是很稳定的 但是,我安装unity5.5的时候,不小心选择了顺带安装了VS2015,就等于我电脑里面有了两个 ...
- MyBatis Generator 学习
根据数据库,自动生成 VO.XML或者DAO的工具. 同大多数工具(或者框架)一样,需要加载一个配置文件,然后根据配置文件中的内容连接数据库,访问其中的表内容,最后生成实体类以及MAPPER. 占位用 ...
- Android开发人员必备的10个开发工具
工欲善其事,必先利其器,Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. 1.Eclipse ADT E ...
- 【BZOJ】1637: [Usaco2007 Mar]Balanced Lineup(前缀和+差分+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1637 很神思想.. 前缀和应用到了极点... 我们可以发现当数量一定时,这个区间最前边的牛的前边一个 ...
- AWS系列-EC2默认限制说明
Amazon EC2 提供您可以使用的不同资源,例如实例和卷. 在您创建 AWS 账户时,AWS 会针对每个区域中的这些资源设置限制.此页面列出您在 亚太区域 (东京) 中的 EC2 服务限制. 1. ...
- Struts2_day01--Struts2的核心配置文件_常量配置_分模块开发_Action编写方式
Struts2的核心配置文件 1 名称和位置固定的 2 在配置文件中主要三个标签 package.action.result,标签里面的属性 标签package 1 类似于代码包,区别不同的actio ...
- iOS开发之-- 从当前隐藏导航界面push到下一个显示导航界面出现闪一下的问题
在修改项目代码的过程中,遇到一个问题,就是比如主页面的导航栏是隐藏的,但是需要push到别的页面,这个时候,会出现导航栏闪一下的情况, 下面是我写的一种方案,也就是在loadView这个生命周期函数中 ...
- 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
本文转载至 http://blog.csdn.net/learnios/article/details/8442201 分类: 功能模块2012-12-27 10:22 109人阅读 评论(0) 收 ...
- 报错:org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 1.错误描述 严重: Servlet /hux ...