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 ...
随机推荐
- 软工实践Beta冲刺(3/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- DPDK vhost库
原创翻译,转载请注明出处. vhost库实现了一个用户空间的virtio net server,允许用户直接处理virtio ring队列.换句话说,它让用户可以从VM virtio网络设备读取或写入 ...
- delphi数据库进行增加操作时,怎么判断插入的这个值是否已经存在?
//增 procedure TForm1.btnAddClick(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQu ...
- bootstrap table表格属性、列属性、事件、方法
留存一份,原文地址http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 表格参数 表格的参数定义在 jQuery.fn.bootst ...
- HDU 6194 string string string(后缀数组+RMQ)
string string string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- BZOJ1927 [Sdoi2010]星际竞速 【费用流】
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2582 Solved: 1601 [Submit][St ...
- poj 3422 洛谷P2045 K取方格数(方格取数加强版)
Description: 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来 ...
- js金额转大写数字
//金额转大写数字 const intToChinese = money => { //汉字的数字 let cnNums = new Array('零', '壹', '贰', '叁', '肆', ...
- NOIP2016愤怒的小鸟 [状压dp]
愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...