并没有做到这道题,后来听学长说了题意,总之就是立体几何嗯

  看了好几份题解,是的我知道是异面线段的距离了,可是看码完全不明orz。

  这时候出现了一份清晰易懂甚至给出了公式来源的blog╰(*°▽°*)╯

  仔细一看是kuangbin的blogΣ(⊙▽⊙"让我先%一%orz

  http://blog.sina.com.cn/s/blog_a401a1ea0101ij9z.html公式Time Tunnel在此

  <!----------这部分是解释给以后看不懂的自己的---------->

       (一张简约线条的示意图)

    首先获得两线段的向量(e1,e2),然后叉乘得到垂直于两线段的直线p,p与其中一条线段形成的平面截另一线段于一点,同理得两线段(的延长线)上各一点,则该两点间的距离为两线段最短距离。

    那么一线段指向另一线段的向量AB在p上的投影即为最短距离。

    需要记住的公式  d=|p·AB/p|  交点R1=A+t1·e1  

             t1=((B-A)Xe2)·(e1Xe2)/|e1Xe2|2    t2=((B-A)Xe1)·(e1Xe2)/|e1Xe2| 

  <!-------OVER------->

  那么就放一下最后按照蒟蒻习惯敲的乱码,似乎并不需要求两点距离,所以kuangbin的题解里有dis而蒟蒻偷懒没写

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct node {
double x, y, z;
node(double a=, double b=, double c=) {
x = a; y = b; z = c;
}
node operator + (const node &p) const { return node(x + p.x, y + p.y, z + p.z); }
node operator - (const node &p) const { return node(x - p.x, y - p.y, z - p.z); }
double operator * (const node &p) const { return x * p.x + y * p.y + z * p.z; }
node operator ^ (const node &p) const { return node(y*p.z - z * p.y, z*p.x - x * p.z, x*p.y - y * p.x); }
node operator * (double p) { return node(x*p, y*p, z*p); }
node operator / (double p) { return node(x / p, y / p, z / p); }
}A1,B1,A2,B2,poa,pob; double f(const node &a) { return sqrt(a.x*a.x + a.y*a.y + a.z*a.z); } int main()
{
int t;
cin >> t;
while (t--) {
cin >> A1.x >> A1.y >> A1.z >> B1.x >> B1.y >> B1.z >> A2.x >> A2.y >> A2.z >> B2.x >> B2.y >> B2.z;
node e1 = A1 - B1;
node e2 = A2 - B2;
node e3 = A1 - A2;
node p = e1 ^ e2;
double d = fabs((A1 - A2)*p / f(p));
double t1 = ((A2 - A1) ^ e2)*(e1^e2);
double t2 = ((A2 - A1) ^ e1)*(e1^e2);
double q = f(e1^e2)*f(e1^e2);
t1 /= q; t2 /= q;
poa = A1 + (e1*t1);
pob = A2 + (e2*t2);
printf("%.6lf\n", d);
printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", poa.x, poa.y, poa.z, pob.x, pob.y, pob.z);
}
return ;
}

HDU-4741

  注意事项:不太明白重载operator的优先级判断,我选择打括号,并且由于严格按照定义的运算对象,所以数乘的时候数和结构体的位置不能互换。

          //4.16.接收到神仙的补充,优先级和普通的优先级一样,所以最后的poa和pob里的括号是可以去掉的。

       算t1和t2的时候A2,A1的位置会影响结果的正负,反正有样例,试一下好了(实际上是这个懒惰的没有手算样例的人并没有搞清楚为什么)

比预计的结束时间晚了二十分钟嘤。

[数]昨天欠下的一道立体几何题HDU-4741的更多相关文章

  1. 可恶!学了这么久的LCA,联考的题目却是LCA+树形DP!!!可恶|!!!这几天想学学树形DP吧!先来一道入门题HDU 1520 Anniversary party

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  2. 又是一道水题 hdu背包

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  3. 2013杭州网络赛D题HDU 4741(计算几何 解三元一次方程组)

    Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)

    前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...

  5. 又一道简单题&&Ladygod(两道思维水题)

    Ladygod Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  6. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  7. POJ-1200 Crazy Search,人生第一道hash题!

                                                        Crazy Search 真是不容易啊,人生第一道hash题竟然是搜博客看题解来的. 题意:给你 ...

  8. 第三届山西省赛1004 一道大水题(scanf)

    一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人, ...

  9. ny525 一道水题

    一道水题时间限制:1000 ms  |  内存限制:65535 KB 难度:2描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他吗? ...

随机推荐

  1. vue 添加旋转图片 修改css transform 值

    //点击放大图片并旋转图片 conponents组建 <template>    <!-- 过渡动画 -->    <transition name="fade ...

  2. Java链接MySQL数据库的配置文件

    文件名:db.properties(随便) driver = com.mysql.jdbc.Driver  //MySQL数据库驱动名url = jdbc:mysql://localhost:3306 ...

  3. CentOS7.5 下搭建SFTP

    CentOS7.5 下搭建SFTP Linux 创建用户组 groupadd sftp 创建用户test useradd -G sftp -s /sbin/nologin test -s 禁止用户ss ...

  4. dao层、service和action的运用和区别

    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,对于数据库的操作,具体到对于某个表的增删改查, 也就是说某个DAO一定是和数据库的某一张表一一对应的 ...

  5. css中绝对定位和相对定位的区别

    先说个技巧一般用:子绝父相,即相对定位是给父级的,绝对定位的时候是给子级的. 一:绝对定位 position: absolute;绝对定位:绝对定位是相对于元素最近的已定位的祖先元素(即是设置了绝对定 ...

  6. C#socket编程之实现一个简单的TCP通信

    TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...

  7. vue页面引入外部js文件遇到的问题

    问题一:vue文件中引入外部js文件的方法 //在vue文件中 <script> import * as funApi from '../../../publicJavaScript/pu ...

  8. VNPY加密教程(Python生成pyd文件)

    安装成功之后,再修改设置.让Cython可以找到vcarsall.bat.此处有两种方案.(我采用方案1,亲测可用.方案2未测试,看似可用.) 方案1:修改Python安装目录的文件设置 window ...

  9. Unity --- 在原目录中,将选中的Texture剥离为rgb和alpha

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; us ...

  10. tomcat: 类加载器

    一.tomcat是个web容器,要解决以下问题 1. 一个web容器可能要部署两个或者多个应用程序,不同的应用程序,可能会依赖同一个第三方类库的不同版本,因此要保证每一个应用程序的类库都是独立.相互隔 ...