poj 2826(好坑,线段相交问题)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 11576 | Accepted: 1760 |
Description

Your mission is to calculate how much rain these two boards can collect.
Input
Each test case consists of 8 integers not exceeding 10,000 by absolute value, x1, y1, x2, y2, x3, y3, x4, y4. (x1, y1), (x2, y2) are the endpoints of one board, and (x3, y3), (x4, y4) are the endpoints of the other one.
Output
each test case output a single line containing a real number with
precision up to two decimal places - the amount of rain collected.
Sample Input
2
0 1 1 0
1 0 2 1 0 1 2 1
1 0 1 2
Sample Output
1.00
0.00
一点都不easy...
aaarticlea/png;base64,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" alt="" width="439" height="193" />没能AC的看看吧。。
discuss里面参考数据:
9
样例一:
6259 2664 8292 9080 1244 2972 9097 9680
答案:6162.65 样例二:
0 1 1 0
1 0 2 1
答案:1.00 样例三:
0 1 2 1
1 0 1 2
答案:0.00 样例四:
0 0 10 10
0 0 9 8
答案:0.00 样例五:
0 0 10 10
0 0 8 9
答案:4.50 样例六: //这组数据其实我没过也AC了
0.9 3.1 4 0
0 3 2 2
答案:0.50 样例七:
0 0 0 2
0 0 -3 2
答案:3.00 样例八:
1 1 1 4
0 0 2 3
答案:0.75 样例九:
1 2 1 4
0 0 2 3
答案:0.00
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps = 1e-;
struct Point
{
double x,y;
};
double cross(Point a,Point b,Point c)
{
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
///规范相交
bool isCross(Point a,Point b,Point c,Point d)
{
if(cross(c,b,a)*cross(b,d,a)<-eps) return false; ///这里要改成eps我上面的那组数据才能为0.5..不过是0也能AC。。so strange
if(cross(a,d,c)*cross(d,b,c)<-eps) return false;
return true;
}
///计算两条直线的交点
Point intersection(Point a,Point b,Point c,Point d)
{
Point p = a;
double t = ((a.x-c.x)*(c.y-d.y)-(a.y-c.y)*(c.x-d.x))/((a.x-b.x)*(c.y-d.y)-(a.y-b.y)*(c.x-d.x));
p.x +=(b.x-a.x)*t;
p.y +=(b.y-a.y)*t;
return p;
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
Point a,b,c,d;
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
if(a.y==b.y||c.y==d.y||!isCross(a,b,c,d)) ///排除水平放置还有不相交的情况
{
printf("0.00\n");
continue;
}
Point p = intersection(a,b,c,d); ///交点
double y = min(max(a.y,b.y),max(c.y,d.y));
if(y<=p.y) ///上面的y不可能小于交点,不然接不到水
{
printf("0.00\n");
continue;
}
///我只要y上面的点
Point t1,t2;
if(a.y>b.y) t1 = a;
else t1 = b;
if(c.y>d.y) t2 = c;
else t2 = d;
///两个向量极角大的x坐标必定小于极角小的,不然雨水没办法流进去
if(cross(t1,t2,p)>&&t1.x>t2.x||cross(t2,t1,p)>&&t2.x>t1.x)
{
double k,B,x,x0;
if(y==t1.y)
{
x = t1.x;
if(t2.x==p.x) ///这里略坑
{
x0 = p.x;
}
else
{
k = (t2.y- p.y)/(t2.x - p.x);
B = t2.y-k*t2.x;
x0 = (y-B)/k;
}
}
else
{
x = t2.x;
if(t1.x==p.x)
{
x0 = p.x;
}
else
{
k = (t1.y- p.y)/(t1.x - p.x);
B = t1.y-k*t1.x;
x0 = (y-B)/k;
} }
double l = fabs(x-x0);
double h = fabs(y-p.y);
printf("%.2lf\n",l*h/);
continue;
}
printf("0.00\n");
}
return ;
}
poj 2826(好坑,线段相交问题)的更多相关文章
- POJ 1066 Treasure Hunt(线段相交判断)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4797 Accepted: 1998 Des ...
- POJ 2653 Pick-up sticks(线段相交)
题意:给定n个木棍依次放下,要求最终判断没被覆盖的木棍是哪些. 思路:快速排斥以及跨立实验可以判断线段相交. #include<algorithm> #include<cstdio& ...
- poj 3304(直线与线段相交)
传送门:Segments 题意:线段在一个直线上的摄影相交 求求是否存在一条直线,使所有线段到这条直线的投影至少有一个交点 分析:可以在共同投影处作原直线的垂线,则该垂线与所有线段都相交<==& ...
- [poj 1127]Jack Straws[线段相交][并查集]
题意: 给出一系列线段,判断某两个线段是否连通. 思路: 根据线段相交情况建立并查集, 在同一并查集中则连通. (第一反应是强连通分量...实际上只要判断共存即可, 具体的方向啊是没有关系的..) 并 ...
- POJ 2653 Pick-up sticks [线段相交 迷之暴力]
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 12861 Accepted: 4847 D ...
- POJ 1066--Treasure Hunt(判断线段相交)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7857 Accepted: 3247 Des ...
- POJ 1127 Jack Straws (线段相交)
题意:给定一堆线段,然后有询问,问这两个线段是不是相交,并且如果间接相交也可以. 析:可以用并查集和线段相交来做,也可以用Floyd来做,相交就是一个模板题. 代码如下: #pragma commen ...
- TTTTTTTTTTTTTT poj 1127 Jack Straws 线段相交+并查集
题意: 有n个木棍,给出木棍的两个端点的x,y坐标,判断其中某两个线段是否连通(可通过其他线段连通) #include <iostream> #include <cstdio> ...
- POJ 1039 直线和线段相交
题意: 题意很好理解,从左边射过来的光线,最远能经过管道到右边多少距离. 分析: 光线一定经过一个上端点和一个下端点,这一点很容易想到.然后枚举上下端点即可 #include <iostream ...
随机推荐
- java的命名空间
这个package me.gacl.websocket相当于.net中的namespace命名空间. import 相当于.net中的using,引用命名空间:
- php获取微信token和ticket并返回签名
jssdk.php页,主要获取token和ticket <?php /* * 微信公众号后台里获取appId和appSecret,并在公众号后台=>安全中心=>IP白名单中设置当前页 ...
- 下拉框select chosen被遮盖
最简单的就是让容器高度大点. 用js调整也行. 为什么z-index不管事,看下面... 浏览器支持 所有主流浏览器都支持 z-index 属性. 注释:任何的版本的 Internet Explore ...
- (转)MongoDB numa系列问题三:overcommit_memory和zone_reclaim_mode
内核参数overcommit_memory : 它是 内存分配策略 可选值:0.1.2.0:表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的可用内存,内存申请允许:否则,内存申请失败,并 ...
- dechex()
dechex() 函数把十进制转换为十六进制生成验证码的时候用到了
- Dubbo 的 Helloworld
前提条件 安装好了 ZooKeeper 作为注册中心 服务端 <?xml version="1.0" encoding="UTF-8"?> < ...
- sqoop工具从oracle导入数据2
sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...
- dns服务 很多问题,后续再研究
慕课网:http://www.imooc.com/video/5220 参考:http://jingyan.baidu.com/article/870c6fc32c028eb03fe4be30.htm ...
- JavaScript的相等(==)与全等(===)
有段代码如下: view source print? 1 if (![] == []) { 2 //Code 3 } ![] == [],true or false? 我们都知道,ECMA ...
- Codeforces Round #520 (Div. 2) C. Banh-mi
C. Banh-mi time limit per test:1 second memory limit per test:256 megabytes 题目链接:https://codeforc.es ...