Distance
1191: Distance
时间限制: 1 Sec 内存限制: 32 MB
题目描述
There is a battle field. It is a square with the side length 100 miles, and unfortunately we have two comrades who get hurt still in the battle field. They are in different positions. You have to save them. Now I give you the positions of them, and you should choose a straight way and drive a car to get them. Of course you should cross the battle field, since it is dangerous, you want to leave it as quickly as you can!
输入
There are many test cases. Each test case contains four floating number, indicating the two comrades' positions (x1,y1), (x2,y2).
Proceed to the end of file.
输出
you should output the mileage which you drive in the battle field. The result should be accurate up to 2 decimals.
样例输入
1.0 2.0 3.0 4.0 15.0 23.0 46.5 7.0
样例输出
140.01 67.61
提示
The battle field is a square local at (0,0),(0,100),(100,0),(100,100).
解题思路
首先计算两点所确定的直线l,算出直线方程。计算出直线在x=0上的截距a和在x=100上的截距b,通过比较他们与0和100的关系可确定直线所处的位置,进而可利用勾股定理求出l在正方形内部的长度。
#include <stdio.h>
#include <math.h>
int main()
{
double x1, x2, y1, y2, x, y, s, k, a, b;
while (~scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2))
{
if (x1 == x2 || y1 == y2)
{
printf("100.00\n");
continue;
}
k = (y1 - y2) / (x1 - x2); /*算出直线的斜率*/
a = y1 - k * x1; /*算出直线在直线x=0上的截距a*/
b = y1 - k * (x1 - 100); /*算出直线在直线x=100上的截距b*/
if (a >= 100)
{
if (b < 0)
{
x = x1 - (y1 - 100) / k;
y = (x1 - y1 / k) - x;
s = sqrt(10000 + y * y);
printf("%.2f\n", s);
}
else if (b < 100)
{
x = 100 - (x1 - (y1 - 100) / k);
y = 100 - b;
s = sqrt(x * x + y * y);
printf("%.2f\n", s);
}
else printf("0.00\n");
}
else if (a >= 0)
{
if (b >= 100)
{
x = x1 - (y1 - 100) / k;
y = 100 - a;
s = sqrt(x * x + y * y);
printf("%.2f\n", s);
}
else if (b >= 0)
{
x = 100;
y = fabs(a - b);
s = sqrt(x * x + y * y);
printf("%.2f\n", s);
}
else
{
x = x1 - y1 / k;
y = a;
s = sqrt(x * x + y * y);
printf("%.2f\n", s);
}
}
else
{
if (b >= 100)
{
x = x1 - (y1 - 100) / k;
y = x - (x1 - y1 / k);
s = sqrt(10000 + y * y);
printf("%.2f\n", s);
}
else if (b > 0)
{
x = 100 - (x1 - y1 / k);
y = b;
s = sqrt(x * x + y * y);
printf("%.2f\n", s);
}
else printf("0.00\n");
}
}
return 0;
}
Distance的更多相关文章
- [LeetCode] Total Hamming Distance 全部汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- [LeetCode] Hamming Distance 汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- [LeetCode] Rearrange String k Distance Apart 按距离为k隔离重排字符串
Given a non-empty string str and an integer k, rearrange the string such that the same characters ar ...
- [LeetCode] Shortest Distance from All Buildings 建筑物的最短距离
You want to build a house on an empty land which reaches all buildings in the shortest amount of dis ...
- [LeetCode] Shortest Word Distance III 最短单词距离之三
This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...
- [LeetCode] Shortest Word Distance II 最短单词距离之二
This is a follow up of Shortest Word Distance. The only difference is now you are given the list of ...
- [LeetCode] Shortest Word Distance 最短单词距离
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- [LeetCode] One Edit Distance 一个编辑距离
Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...
- [LeetCode] Edit Distance 编辑距离
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- C#实现Levenshtein distance最小编辑距离算法
Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑 ...
随机推荐
- python作业高级FTP
转载自:https://www.cnblogs.com/sean-yao/p/7882638.html 作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己 ...
- python中的私有变量
class Test1: def f1(self): self.name ="张三" self.__age = 20 #使用名称变形实现私有变量 print(self.name) ...
- 1.2MyBatis介绍
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上 ...
- SpringBoot多模块搭建,依赖管理
1.创建springboot-multi-module父工程 File→New→Project 然后,Next,选择POM,其他名称自定义 Next→Finish. 说明:打开父工程的pom.xml ...
- Latex 编辑数学公式——快速上手
参考链接: https://blog.csdn.net/fansongy/article/details/45368915 特殊符号: https://blog.csdn.net/caiandyong ...
- date命令以及date -d使用
date -d '2 days ago' //显示2天前的时间,2019年 02月 10日 星期日 08:53:28 CST date -d "2 days ago" +%Y%m% ...
- Vue.js 子组件的异步加载及其生命周期控制
前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...
- python3+requests库框架设计07-生成测试报告
使用HTMLTestRunner可以生成测试报告.HTMLTestRunner是unittest模块下的一个拓展,原生的生成报告样式比较丑,GitHub上有大佬优化过后的版本:GitHub地址.下载之 ...
- zabbix批量监控urls的状态码
.添加url监控脚本 [root@node1 usr]# vim /usr/local/zabbix_agents_3.2.0/scripts/web_site_code_status.sh #!/b ...
- SSH框架搭建笔记
1.建立一个web项目,设置编码格式,建立src下的包,建立资源文件夹 2.加入Spring运行必须的jar包(5个jar包) spring-beans-4.1.4.RELEASE.jar sprin ...