ZOJ 1090 - The Circumference of the Circle 解题报告

简介: 题目的链接在这里:       http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1090       题目描述很简单,大意是,给出三个点的坐标,设为A(x1,y1),B (x2, y2),C (x3, y3),然后求出通过这三点的圆的周长(保留两位小数)。
      题目的链接在这里:
      题目描述很简单,大意是,给出三个点的坐标,设为A(x1,y1),B (x2, y2),C (x3, y3),然后求出通过这三点的圆的周长(保留两位小数)。但推导公式却比较麻烦,我是这样来做的。
      首先根据同一个弦的圆心角角度相同,不难得出,圆周的直径d= BC/ sin a = AC/ sin b = AB/sin c;
      因此求圆周长= BC / sin (a) *PI;
      其中BC为角a的对边长度= sqrt ( (x2-x3)^2 + (y2-y3)^2);
      至于sin (a),我们必须通过三点坐标来算,比较麻烦一些,可以利用三角函数的公式:
      sin (a)=sin (a1-a2)=sin (a1)cos(a2)-cos(a1)sin(a2);
      其中a1和a2分别为射线AC和射线AB和x轴的夹角。如果B,C点都在第一象限,显然有
      sin(a1)=(y3-y1)/AC;
      cos(a1)=(x3-x1)/AC;
      sin(a2)=(x2-x1)/AB;
      cos(a2)=(y2-y1)/AB;
      化简上式:
      周长= BC / sin (a) * PI =( AC*AB*BC ) / ( (y3-y1)(x2-x1)-(x3-x1)(y2-y1) )  * PI;
      因此,我们就可以写出如下代码 ( IN C ) :
img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif The Circumference of the Circle
#include <stdio.h>
#include 
<math.h>
#define PI 3.141592653589793
#define DISTANCE(x1,y1,x2,y2)  sqrt(((x2)-(x1))*((x2)-(x1))+((y2)-(y1))*((y2)-(y1)))
void main()
{
    
double x1, x2, x3, y1, y2, y3;
    
double d12, d23, d31, k, result;
    
while(scanf("%lf %lf %lf %lf %lf %lf"&x1, &y1, &x2, &y2, &x3, &y3)!=EOF)
    {
        d12 
= DISTANCE(x1,y1,x2,y2);
        d23 
= DISTANCE(x2,y2,x3,y3);
        d31 
= DISTANCE(x3,y3,x1,y1);
        k 
= fabs((y3-y1)*(x2-x1)-(x3-x1)*(y2-y1));
        result
=d12*d23*d31/k*PI;
        printf(
"%.2lf\n",result); 
    }
}
      代码仅有18行,并且一次性顺利的AC了,并且发现我的解居然是所有解中排名第一的,呵呵,额外的惊喜。
 
AC WA PE FPE SF TLE MLE CE Total
1926(54%) 864(24%) 8(0%) 1(0%) 85(2%) 275(7%) 0(0%) 354(10%) 3517

Top Submssions by Run Time
Submit Time Language Run Time(ms) Run Memory(KB) User Name
2008-10-15 21:49:18 C 0 160 hoodlum1980
2008-10-16 17:35:10 C 0 160 angel
2008-10-03 16:58:56 C++ 0 176 xxhhtt
2008-10-03 21:35:18 C++ 0 176 mart0258
2008-10-07 15:21:35 C++ 0 176 Rorro
2008-10-09 13:14:03 C++ 0 176 missing08
2008-10-15 02:34:20 C++ 0 176 watashi@Zodiac
2008-10-15 02:54:43 C++ 0 176 watashi@Zodiac
2008-10-15 03:02:27 C++ 0 176 watashi@Zodiac
2008-10-03 17:48:05 C++ 0 184 lizhen
         。。。
目录
相关文章
|
JavaScript
vue element plus Descriptions 描述列表
vue element plus Descriptions 描述列表
521 0
|
9月前
|
存储 机器学习/深度学习 网络协议
阿里云企业级ARM计算规格族简介:特点、场景与价格参考
Arm计算是指基于 ARM 架构的处理器进行的计算,本文将为您解析阿里云ARM云服务器的特点、适用场景,以及最新价格情况,以供了解和参考。
|
Java Android开发 UED
深入探索安卓应用开发中的生命周期管理:从创建到销毁的全过程
在安卓应用开发中,理解并妥善管理应用及活动(Activity)的生命周期至关重要。本文将详细解析从应用创建到销毁的整个生命周期过程,以及如何通过高效管理提升应用性能与用户体验。
388 4
|
机器学习/深度学习 编解码 API
《黑神话:悟空》中的光线追踪与DLSS技术解析
【8月更文第26天】《黑神话:悟空》是一款备受期待的国产动作冒险游戏,它采用了先进的图形技术,包括实时光线追踪和NVIDIA DLSS(Deep Learning Super Sampling),以提供令人震撼的视觉效果和流畅的游戏体验。本文将深入探讨这两种技术在游戏中的应用及其背后的原理。
447 1
|
自然语言处理 前端开发 JavaScript
Babel 的工作原理以及怎么写一个 Babel 插件
Babel 的工作原理以及怎么写一个 Babel 插件
395 0
|
存储 机器学习/深度学习 Web App开发
秒懂算法 | DP 概述和常见 DP 面试题
动态(DP)是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。本篇内容介绍了 DP 的概念和基本操作;DP 的设计、方程推导、记忆化编码、递推编码、滚动数组以及常见的 DP 面试题。
926 0
秒懂算法 | DP 概述和常见 DP 面试题
|
算法 应用服务中间件 图形学
贝叶斯推理导论:如何在‘任何试验之前绝对一无所知’的情况下计算概率
这篇文章探讨了贝叶斯推理的发展历史,从帕斯卡尔和费马的早期工作到托马斯·贝叶斯、皮埃尔-西蒙·拉普拉斯和哈罗德·杰弗里斯的贡献。文章指出,贝叶斯分析经历了从使用均匀先验到发展更为客观的方法,如杰弗里斯先验的过程。它讨论了费雪对逆概率的批评,以及贝叶斯方法在处理不确定性问题上的优势。文章还介绍了如何通过匹配覆盖率来评估先验分布的合理性,并通过几个例子展示了不同先验在二项分布和正态分布问题中的应用。最后,文章提出了贝叶斯分析在统计学中的地位,强调了在缺乏先验知识时建立良好先验的重要性,并讨论了主观性和客观性在统计推理中的角色。
294 1
|
数据采集 数据可视化 小程序
vue3+echarts可视化——记录我的2023编程之旅
vue3+echarts可视化——记录我的2023编程之旅
333 1
|
Java Unix Linux
C语言中的异常处理
C语言中的异常处理
420 0
|
Ubuntu Docker 容器
百度搜索:蓝易云【Ubuntu多种安装docker方式。】
这些是Ubuntu上安装Docker的几种常用方式。根据个人喜好和具体需求,选择适合的安装方式即可开始使用Docker。
276 0