[CQOI2005]三角形面积并

题目大意:

求\(n(n\le100)\)个三角形的面积并。

思路:

自适应辛普森法,玄学卡精度可过。

源代码:

#include<cmath>
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
inline int getint() {register char ch;while(!isdigit(ch=getchar()));register int x=ch^'0';while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');return x;
}
const int N=101;
const double eps=1e-10;
struct Point {double x,y;
};
struct Triangle {Point p1,p2,p3;
};
Triangle t[N];
struct Node {double p;int v,id;bool operator < (const Node &rhs) const {return p<rhs.p;}
};
std::vector<Node> v;
std::vector<int> c;
inline bool cross(const Point &a,const Point &b,const double &x) {if(a.x==b.x) return false;if(a.x<b.x) {return a.x<=x&&x<b.x;} else {return b.x<x&&x<=a.x;}
}
inline double calc(const Point &a,const Point &b,const double &x) {return (b.y-a.y)/(b.x-a.x)*(x-a.x)+a.y;
}
inline double F(const double &x) {std::vector<std::pair<double,int> > v;for(register unsigned j=0;j<c.size();j++) {const int &i=c[j];double q[3];int h=0;if(cross(t[i].p1,t[i].p2,x)) {q[h++]=calc(t[i].p1,t[i].p2,x);}if(cross(t[i].p2,t[i].p3,x)) {q[h++]=calc(t[i].p2,t[i].p3,x);}if(cross(t[i].p3,t[i].p1,x)) {q[h++]=calc(t[i].p3,t[i].p1,x);}if(h==2) {if(q[0]>q[1]) std::swap(q[0],q[1]);v.push_back(std::make_pair(q[0],1));v.push_back(std::make_pair(q[1],-1));}}std::sort(v.begin(),v.end());double st,ans=0;for(register unsigned i=0,tmp=0;i<v.size();i++) {if(tmp==0) st=v[i].first;tmp+=v[i].second;if(tmp==0) {ans+=v[i].first-st;}}return ans;
}
inline double simpson(const double &fl,const double &fm,const double &fr,const double &len) {return (fl+4*fm+fr)*len/6;
}
inline double asr(const double &a,const double &b,const double &fl,const double &fm,const double &fr,const int &d) {const double c=(a+b)/2;const double flm=F((a+c)/2),frm=F((c+b)/2);const double ls=simpson(fl,flm,fm,c-a),rs=simpson(fm,frm,fr,b-c),s=simpson(fl,fm,fr,b-a);if(fabs(ls+rs-s)<eps&&d>13) return ls+rs;return asr(a,c,fl,flm,fm,d+1)+asr(c,b,fm,frm,fr,d+1);
}
int main() {const int n=getint();for(register int i=1;i<=n;i++) {scanf("%lf%lf%lf%lf%lf%lf",&t[i].p1.x,&t[i].p1.y,&t[i].p2.x,&t[i].p2.y,&t[i].p3.x,&t[i].p3.y);v.push_back((Node){std::min(std::min(t[i].p1.x,t[i].p2.x),t[i].p3.x),1,i});v.push_back((Node){std::max(std::max(t[i].p1.x,t[i].p2.x),t[i].p3.x),-1,i});}std::sort(v.begin(),v.end());int tmp=0,beg;double ans=0;for(register unsigned i=0;i<v.size();i++) {if(tmp==0) beg=i;tmp+=v[i].v;if(tmp==0) {for(register unsigned j=beg;j<=i;j++) {c.push_back(v[j].id);}std::sort(c.begin(),c.end());c.resize(std::unique(c.begin(),c.end())-c.begin());const double &st=v[beg].p,&en=v[i].p;ans+=asr(st,en,F(st),F((st+en)/2),F(en),1);c.clear();}}printf("%.2f\n",ans);return 0;
}

转载于:https://www.cnblogs.com/skylee03/p/10182995.html

[CQOI2005]三角形面积并相关推荐

  1. bzoj 1845 [Cqoi2005] 三角形面积并 扫描线+计算几何

    题面 题目传送门 解法 不妨将三角形所有的定点和边上的交点全部单独拎出来,然后考虑横坐标相邻的两个点. 假设以这两个点的横坐标分别作一条很长的竖直线,那么必然会和一些三角形形成若干个梯形(三角形也可以 ...

  2. python求三角形面积步骤_python算三角形面积

    展开全部 代码如下: #!/usr/bin/python3 # -*- coding:utf-8 -*- """ @author:yaqon @file :shanjia ...

  3. 编程三角形面积公式_三角形面积公式110式(英文版)

    点击上面蓝色文字关注杨志明数学角精华博览8年新课标I.5年新课标II.4年新课标III高考数学真题详细解析16年新课标I.9年新课标II.4年新课标III高考数学真题分类详解2020年高考数学重要专题 ...

  4. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  5. Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积

    *2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点横纵坐标值,然后显示它的面积 题目 题目概述 运行示例 思路 代码 如何用嵌套的pow()写出两点距离公式 题目 题目概述 2.19( ...

  6. 2015年第六届蓝桥杯 - 省赛 - Java大学B组 - A. 三角形面积

    三角形面积 如[图1]所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. Ideas 这道题跟2018年第九届蓝桥杯 - ...

  7. c#中计算三角形面积公式_看着有点迷的三角形面积计算

    近期国际高中考试很多,今天就分享一道初中自主招生题: 废话不多说直接给详解,看完大家也可以想想如果是其它等分点我们是不是也可以用类似的方法算出来. [详解] 连结DF,如下图所示: 可知, (可以用比 ...

  8. 利用等积变换巧解三角形面积问题

    正方形 ABCD 和 正方形 CEFG 中,BCE 在同一直线上,阴影三角形面积为 8,求正方形 ABCD 面积为多少? 解:做辅助线 CF. 因为 ∠DBC = ∠FCE = 45°,所以线段 DB ...

  9. 2015蓝桥杯省赛---java---B---1(三角形面积)

    题目 三角形面积 解法 数学方法,直接求三角形的面积 88 - (82)/2 - (46)/2 - (84)/2 = 64 - (8+12+16) = 64 - 36 = 28 答案 28

最新文章

  1. ACMNO.7 输入两个正整数m和n,求其最大公约数和最小公倍数。 输入 两个整数 输出 最大公约数,最小公倍数 样例输入 5 7 样例输出 1 35
  2. 我非要捅穿这 Neutron(一)网络实现模型篇
  3. linux运维、架构之路-MySQL(一)
  4. C#中Cookies的读取
  5. Python每日一练(9)-批量爬取B站小视频
  6. 【转载】这次拆库 应是微服务化的拆分方式
  7. nginx 多php项目配置文件,nginx 配置文件配置多个站点
  8. ILSVRC2016
  9. [项目管理]-第四章:过程定义和过程裁剪
  10. 【2022考石开正攵★氵台】思维导图
  11. react-router嵌套路由页面无法显示
  12. ASUS华硕天选/天选2P/天选3P/飞行堡垒789/枪神/枪神2/枪神3/枪神4/枪神5P/枪神6P/幻14 FA506 FX506安装原厂Windows10系统原装Windows11出厂系统重装
  13. 演示笔记本重装系统win10教程,笔记本电脑安装win10系统
  14. tcp连接失败触发的异常
  15. 【ol-cesium】OpenLayers与Cesium的二三维联动
  16. 技能兴鲁试题--可视化
  17. Extreme Picture Finder(网络图片下载器)官方中文版V3.53.3 | 下载网页图片的软件 | 图片助手批量图片下载器
  18. 四川省房产测绘实施细则[2010版]-5
  19. Unknown database ‘ ‘
  20. 精英反向学习与黄金正弦优化的HHO算法

热门文章

  1. 《灵魂的事-节选》(史铁生)
  2. 流程配置中,什么是会签/或签(竞签)
  3. 第三方 Masonry约束的使用
  4. SiTime 硅晶振与石英晶振的区别
  5. css表格nth左对齐,使用CSS nth-child选择单个表格单元格
  6. 关于嵌入式的技术竞争力需要花点时间整理一下给大家
  7. 数据结构笔记正式版8――手写
  8. 【Java UI】HarmonyOs如何集成Hawk
  9. eclipse/UAP debug模式
  10. [自考总结]考的全没背,背的全没考是一种什么体验