Hdu1071 *完全就是考高数嘛*
来源:互联网 发布:win10系统适合编程吗 编辑:程序博客网 时间:2024/05/17 10:08
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
typedef struct {
double x;
double y;
} point;
double distance(point line1, point line2, point x)
{
//x 到line的距离
double a = (line1.y - line2.y)/(line1.x - line2.x);
double b = line1.y - a * line1.x;
return abs(a*x.x - x.y + b)/sqrt(a*a + 1);
}
double eare(point x, point y, point z, double a, double b, double c)
{
//a, b, c是二次方程参数
double temp = distance(x, y, z);
if (temp < 0.0001) {
//返回满足条件的三角形的面积
return sqrt((x.x - y.x)*(x.x - y.x) + (x.y - y.y)*(x.y - y.y)) / 2 * temp;
} else {
point e1, e2;
e1.x = (x.x + z.x) / 2;
e1.y = a*e1.x*e1.x + b*e1.x + c;
e2.x = (y.x + z.x) / 2;
e2.y = a*e2.x*e2.x + b*e2.x + c;
//返回大三角和两个小三角的面积之和
return eare(x, z, e1, a, b, c) + eare(y, z, e2, a, b, c) + sqrt((x.x - y.x)*(x.x - y.x) + (x.y - y.y)*(x.y - y.y)) / 2 * temp;
}
}
int main(int argc, char *argv[])
{
int N;
cin >> N;
point x, y, z;
while (N--) {
//有顺序要求,如题目的输入顺序
cin >> z.x >> z.y >> x.x >> x.y >> y.x >> y.y;
double a, b, c;
//y = a*x^2 + b*x + c; 方程参数
a = (z.y - x.y - (z.x - x.x)*(y.y - x.y)/(y.x - x.x)) /
((z.x*z.x - x.x*x.x) - (z.x - x.x)*(y.x + x.x));
b = (y.y - x.y - (y.x*y.x - x.x*x.x) * a) / (y.x - x.x);
c = x.y - a*x.x*x.x - b*x.x;
//精度和输出控制
cout << setiosflags(ios::fixed);
cout << setprecision(2) <<eare(x, y, z, a, b, c) << endl;
}
return 0;
}
#include <cmath>
#include <iomanip>
using namespace std;
typedef struct {
double x;
double y;
} point;
double distance(point line1, point line2, point x)
{
//x 到line的距离
double a = (line1.y - line2.y)/(line1.x - line2.x);
double b = line1.y - a * line1.x;
return abs(a*x.x - x.y + b)/sqrt(a*a + 1);
}
double eare(point x, point y, point z, double a, double b, double c)
{
//a, b, c是二次方程参数
double temp = distance(x, y, z);
if (temp < 0.0001) {
//返回满足条件的三角形的面积
return sqrt((x.x - y.x)*(x.x - y.x) + (x.y - y.y)*(x.y - y.y)) / 2 * temp;
} else {
point e1, e2;
e1.x = (x.x + z.x) / 2;
e1.y = a*e1.x*e1.x + b*e1.x + c;
e2.x = (y.x + z.x) / 2;
e2.y = a*e2.x*e2.x + b*e2.x + c;
//返回大三角和两个小三角的面积之和
return eare(x, z, e1, a, b, c) + eare(y, z, e2, a, b, c) + sqrt((x.x - y.x)*(x.x - y.x) + (x.y - y.y)*(x.y - y.y)) / 2 * temp;
}
}
int main(int argc, char *argv[])
{
int N;
cin >> N;
point x, y, z;
while (N--) {
//有顺序要求,如题目的输入顺序
cin >> z.x >> z.y >> x.x >> x.y >> y.x >> y.y;
double a, b, c;
//y = a*x^2 + b*x + c; 方程参数
a = (z.y - x.y - (z.x - x.x)*(y.y - x.y)/(y.x - x.x)) /
((z.x*z.x - x.x*x.x) - (z.x - x.x)*(y.x + x.x));
b = (y.y - x.y - (y.x*y.x - x.x*x.x) * a) / (y.x - x.x);
c = x.y - a*x.x*x.x - b*x.x;
//精度和输出控制
cout << setiosflags(ios::fixed);
cout << setprecision(2) <<eare(x, y, z, a, b, c) << endl;
}
return 0;
}
阅读全文
0 0
- Hdu1071 *完全就是考高数嘛*
- HDU1071
- HDU1071
- HDU1071
- hdu1071
- hdu1071
- HDU1071
- hdu1071
- HDU1071
- HDU1071
- HDU1071(数学题)
- hdu1071 (积分求面积)
- hdu1071(积分求面积)
- HDU1071-抛物线积分
- HDU1071-能量守恒
- 第二周hdu1071
- HDU1071 The area 【积分】
- Hdu1071 The area
- union合并查询结果
- [P1281]书的复制[二分]
- #Paper Reading# Abstractive Sentence Summarization with Attentive Recurrent Neural Networks
- oschina使用pages
- matlab数组运算
- Hdu1071 *完全就是考高数嘛*
- CSS3中的calc( )属性--可以计算的属性
- eclipse的版本
- Android 使用SQL数据库
- Cocos2d-x使用CCGLProgram和Shader文件实现精灵置灰
- 马上大学毕业了,为什么我找不到工作?
- 系统分析与设计学习笔记(二)用例模型
- Java并发编程实战--双重检查加锁( double check lock)与延迟初始化占位
- 设计模式-单例(Singleton)模式