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 ...
随机推荐
- 判断python字典中key是否存在的两种方法
今天来说一下如何判断字典中是否存在某个key,一般有两种通用做法,下面为大家来分别讲解一下: 第一种方法:使用自带函数实现. 在python的字典的属性方法里面有一个has_key()方法,这个方法使 ...
- java笔试面试01
今天给大家分享一下小布去广州华南资讯科技公司笔试和面试的过程. 过程:1.HR面试 2.笔试 3.技术面试 小布下午两点到达,进门从前台领了一张申请表,填完之后带上自己的简历到4楼就开始HR面试. ...
- 结对作业 -GUI四则运算
目录: 一.前言(及项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模块 ...
- [剑指Offer] 15.反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. [思路1]三个指针在链表上同时滑动. /* struct ListNode { int val; struct ListNode *next; ...
- doget,doPost在底层走的是service
doget,doPost在底层走的是service 因为在源码上 先执行service方法 然后再调用doget,doPost方法
- P1531 I Hate It
题目背景 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 题目描述 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的 ...
- 高性能服务器开发之C++定时器
高性能服务器开发之C++定时器 来源: https://www.cnblogs.com/junye/p/5836552.html 写这篇文章前搜了下网上类似的文章,有很多,所以笔者的这篇文章就不对定时 ...
- 【学习笔记】Learning OpenCV3——Ch8 working with video
Reading Video with the cv::VideoCapture Object 对象创建的三种方法: // 1. Input filename cv::VideoCapture::Vid ...
- Hadoop 学习之MapReduce
MapReduce充分利用了分而治之,主要就是将一个数据量比较大的作业拆分为多个小作业的框架,而用户需要做的就是决定拆成多少份,以及定义作业本身,用户所要做的操作少了又少,真是Very Good! 一 ...
- git使用笔记(九)操作原理
By francis_hao Nov 27,2016 参考[1]的一张图已经把git的基本原理描述的很清楚了,如下: 下面以实例演示其过程,需要用到两个命令cat-file和ls-fil ...