BZOJ 1845三角形面积并

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1845

给定100个三角形,求三角形面积并。

戴神模板太可怕。直接调用函数秒掉。思路有点繁琐,不大清楚。贴一个代码。

代码:

/* ***********************************************
Author :rabbit
Created Time :2014/7/3 22:46:38
File Name :2.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <string>
#include <time.h>
#include <math.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
typedef long long ll;
int dcmp(double x){if(fabs(x)<eps)return 0;return x>0?1:-1;
}
struct Point{double x,y;Point(double _x=0,double _y=0){x=_x;y=_y;}
};
Point operator + (Point a,Point b){return Point(a.x+b.x,a.y+b.y);
}
Point operator - (Point a, Point b){return Point(a.x-b.x,a.y-b.y);
}
Point operator * (Point a,double p){return  Point(a.x*p,a.y*p);
}
Point operator / (Point a,double p){return Point(a.x/p,a.y/p);
}
bool operator < (const Point &a,const Point &b){return a.x<b.x||(a.x==b.x&&a.y<b.y);
}
bool operator == (const Point &a,const Point &b){return dcmp(a.x-b.x)==0&&dcmp(a.y-b.y)==0;
}
double Dot(Point a, Point b){return a.x*b.x+a.y*b.y;
}
double Length(Point a){return sqrt(Dot(a,a));
}
double Angle(Point a,Point b){return acos(Dot(a,b)/Length(a)/Length(b));
}
double angle(Point a){return atan2(a.y,a.x);
}
double Cross(Point a,Point b){return a.x*b.y-a.y*b.x;
}
Point GetLineIntersection(Point p,Point v,Point q,Point w){Point u=p-q;double t=Cross(w,u)/Cross(v,w);return p+v*t;
}
struct polygon{int n;Point p[100];double getarea(){double sum=0;for(int i=0;i<n;i++){sum+=Cross(p[i],p[(i+1)%n]);}return fabs(sum)/2;}bool getdir(){double sum=0;for(int i=0;i<n;i++)sum+=Cross(p[i],p[(i+1)%n]);if(dcmp(sum)>0)return 1;return 0;}
};
struct polygons{vector<polygon> p;polygons(){p.clear();}void push(polygon q){if(dcmp(q.getarea()))p.push_back(q);}vector<pair<double,int> > e;void ins(Point s,Point t,Point X,int i){double r=fabs(t.x-s.x)>eps?(X.x-s.x)/(t.x-s.x):(X.y-s.y)/(t.y-s.y);r=min(r,1.0);r=max(r,0.0);e.push_back(make_pair(r,i));}double polyareaunion(){double ans=0;int c0,c1,c2;for(int i=0;i<p.size();i++)if(p[i].getdir()==0)reverse(p[i].p,p[i].p+p[i].n);for(int i=0;i<p.size();i++){for(int k=0;k<p[i].n;k++){Point &s=p[i].p[k],&t=p[i].p[(k+1)%p[i].n];if(!dcmp(Cross(s,t)))continue;e.clear();e.push_back(make_pair(0.0,1));e.push_back(make_pair(1.0,-1));for(int j=0;j<p.size();j++)if(i!=j){for(int w=0;w<p[j].n;w++){Point a=p[j].p[w];Point b=p[j].p[(w+1)%p[j].n];Point c=p[j].p[(w-1+p[j].n)%p[j].n];c0=dcmp(Cross(t-s,c-s));c1=dcmp(Cross(t-s,a-s));c2=dcmp(Cross(t-s,b-s));if(c1*c2<0)ins(s,t,GetLineIntersection(s,t-s,a,b-a),-c2);else if(!c1&&c0*c2<0)ins(s,t,a,-c2);else if(!c1&&!c2){int c3=dcmp(Cross(t-s,p[j].p[(w+2)%p[j].n]-s));int dp=dcmp(Dot(t-s,b-a));if(dp&&c0)ins(s,t,a,dp>0?c0*((j>i)^(c0<0)):-(c0<0));if(dp&&c3)ins(s,t,b,dp>0?-c3*((j>i)^(c3<0)):c3<0);}}}sort(e.begin(),e.end());int ct=0;double tot=0,last;for(int j=0;j<e.size();j++){if(ct==1)tot+=e[j].first-last;ct+=e[j].second;last=e[j].first;}ans+=Cross(s,t)*tot;}}return fabs(ans)/2;}
};
int main()
{//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);int n;while(~scanf("%d",&n)){polygons ps;double ans=0;for(int i=0;i<n;i++){polygon p1;p1.n=3;for(int j=0;j<p1.n;j++){scanf("%lf%lf",&p1.p[j].x,&p1.p[j].y);}ps.push(p1);}printf("%.2f\n",ps.polyareaunion());}return 0;
}


转载于:https://www.cnblogs.com/xfgnongmin/p/10632720.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每个大数据工程师都应该知道的OLAP 核心知识点

转载&#xff1a;https://mp.weixin.qq.com/s/I2WqQoGwK7LRrpB4R2pobw 很值得学习的一篇文章&#xff0c;不适用于初学者&#xff0c;适用于中级或者进阶高级的大数据工程师 OLAP 系统广泛应用于 BI, Reporting, Ad-hoc, ETL 数仓分析等场景&#xff0c;本文主要从体系化的角度…

高效便捷地创建单元格数据图表

您能想象折线图、柱状图这些图表被放在一个小小的单元格中的样子吗&#xff1f;Excel 2010的迷你图功能为您提供了这样的便捷体验&#xff0c;让您高效便捷地创建单元格数据图表&#xff01; 1&#xff0e;打开您想要创建迷你图的Excel工作簿&#xff08;如果它是Excel 97-200…

CLR Via CSharp读书笔记(7):常量和字段

{TODO:}转载于:https://www.cnblogs.com/thlzhf/archive/2012/12/06/2805424.html

高并发 高负载 网站系统架构 !深入讨论!【转载】

转载于:https://www.cnblogs.com/ifishing/archive/2010/05/26/1744339.html

聊透分布式系统一致性

一、强一致性 一致性大家庭中&#xff0c;虽然细分种类很多&#xff0c;但是实际上只有两大类&#xff0c;其中之一就是强一致性&#xff0c;其具体包含了严格一致性(也叫原子一致性或者线性一致性)和顺序一致性。 严格(原子/线性)一致性 严格一致性代表着&#xff0c;当数据更…

使用jquery打造一个动态的预览产品颜色效果

在浏览一些电子商务网站的时候&#xff0c;选择一件产品的时候&#xff0c;我们经常会看到点击衣服的颜色&#xff0c;同一件衣服的颜色就会切换&#xff0c;让我们觉得真是比较有意思&#xff0c;这样做的效果给用户的体验比较好&#xff0c;今天就给大家分享一下这种效果的实…

@RequestMapping 和 @GetMapping @PostMapping 区别

RequestMapping 和 GetMapping PostMapping 区别 GetMapping是一个组合注解&#xff0c;是RequestMapping(method RequestMethod.GET)的缩写。 PostMapping是一个组合注解&#xff0c;是RequestMapping(method RequestMethod.POST)的缩写。 转自&#xff1a;https://www.c…

C++ 中的 #pragma warning(push) 和 #pragma warning(pop)有什么用

#pragma warning(push)是保存当前的编译器警告状态&#xff1b; #pragma warning(pop)是恢复原先的警告状态。 例如&#xff1a;rocksdb中的一段代码 #if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable : 4244) # 禁止compiler警告 // varint32编…

关于软件版本命名的方法

当然&#xff0c;这个在这里谈的很多了&#xff0c; 但这里只是说说我们这边用的几种模式&#xff0c; 主要针对发布比较频繁发布的情况&#xff0c;比如两周一次&#xff0c;一个月一次之类的。【一、major.minor】比如1.0, 1.2, 2.5, 3.0等等。 major是主要版本号&#xff0c…

Java Word转Html

最近转换的需求比较多&#xff0c;最近做了一个Word转Html的 这个要导一个包和配置一个文件 1.jacob.jar 2.与jacob.jar相对应的jacob.dll&#xff08;放在windows/sys32下或者放在jre下面&#xff09; 代码 1 packagetest;2 3 importjava.io.File;4 5 importcom.jacob.activeX…

在vue.js引用图片的问题

<div id"img"> <img src"img.png" class"img"> </div> $(".img").attr("src",require("/img.png")); 在vue里在js中引用图片必须加一个require关键字和在图片地址前面加符号 转载于:https://ww…

CreateCompatibleDC

CreatCompatibleDC()创建了一个和当前屏幕的DC兼容的内存DC&#xff08;DC就是设备上下文的意思&#xff0c;设备上下文就是当前的这个窗体的一些属性&#xff0c;譬如说他使用的画刷&#xff0c;画笔等等&#xff09;&#xff0c;在绘制位图的时候&#xff0c;你必须要在内存中…

leveldb中为什么L 0层中每个sst文件中key的范围都是有重叠的?

在leveldb中&#xff0c;level 0层中的sst文件是由immutable memtable通过后台线程flush得到的&#xff0c;但是由于immutable memtable中的key可能是由重复的&#xff0c;因此在leveldb中将sst文件中key的范围有重叠的所有sst文件都放在了level 0层中&#xff0c;而其他level层…

一些令人震惊的话

1.现在女人真伟大。不知不觉肚子大、有了孩子没有爸&#xff01;2.小时候我们把玩具当朋友、长大了朋友拿我们当玩具。3.你不能让所有的人满意&#xff0c;因为不一定所有的都是人。4.人生就象卫生纸、没事尽量少扯、&#xff01; 5.有老公怎么的&#xff1f; 有守门员球还进呢…

文本分类的一种对抗训练方法

最近阅读了有关文本分类的文章&#xff0c;其中有一篇名为《Adversarail Training for Semi-supervised Text Classification》, 其主要思路实在文本训练时增加了一个扰动因子&#xff0c;即在embedding层加入一个小的扰动&#xff0c;发现训练的结果比不加要好很多。 模型的网…

在leveldb中,为什么要有immutable memtable?

目的是&#xff1a;为了防止写入kv时被阻塞。 设想&#xff0c;如果没有immutable memtable&#xff0c;当memtable满了之后后台线程需要将memtable 立即flush到新建的sst中&#xff0c;在flush的过程中&#xff0c;新的KV记录是无法写入的&#xff0c;只能等待&#xff0c;就…

密码强弱提示(27)

密码的强弱提示是对用户填写登陆密码的复杂程度来给出提示&#xff0c;使用密码的强弱提示可以增强用户对密码的保护意识&#xff0c;对如今的网络是非常有必要的&#xff0c;本程序中当用户输入完密码后&#xff0c;网页会自动的对用户输入的密码给出强弱判断。 使用JavaScrip…

MySQL Cluster 用户权限共享 (各sql节点同步)

转自&#xff1a;http://blog.csdn.net/ylqmf/article/details/7866517 MySQL Cluster API节点 中mysql.user 表为MyISAM引擎&#xff0c;所以每个API都要配置权限系统&#xff0c;MySQL已经为我们提供了共享权限脚本。这个脚本主要作用就是将mysql.user 表MyISAM引擎更换为NDB…

vue项目创建,redis列表字典操作,django用redis的第二种方法

vue项目的创建&#xff08;路飞前端&#xff09; -安装node.js -安装vue的脚手架 -创建vue项目&#xff0c;vue create 项目名字在pycharm中开发vue -webstrom,pyacharm,goland,idea,androidStuidio,Php.... -Edit-conf----》点 选npm-----》在script对应的框中写&a…

心理学三大流派

心理学三大流派及其代表人物精神分析学派、行为主义学派、人本主义心理学影响最大&#xff0c;被称为心理学的三大主要势力[编辑]精神分析学派代表人物&#xff1a;西格蒙德弗洛伊德精神分析由弗洛伊德开创&#xff0c;其后被不断修正与发展&#xff0c;影响力远远超出心理学&a…