HDU
来源:互联网 发布:网络交友英语作文题目 编辑:程序博客网 时间:2024/06/16 00:42
HDU - 1255 题目
题意: 额中文题
基本就是求矩形面积,改一点就好了。
#include <algorithm>#include <cstdio>#include <cstring>#include <iostream>#include <map>using namespace std;#define met(a,b) memset(a,b,sizeof(a))const double eps = 10e-6;const int maxn = 1050;struct node{ double x,y1,y2;int v; node(){} node(double a,double b,double c,int d) { x = a; y1 = b; y2 = c; v = d;}}x[maxn<<1];double y[maxn<<3]; //离散map<double, int> id;int cover[maxn<<3];double len[maxn<<3] , ylen[maxn<<1];int xnum,ynum;bool cmp(node a,node b){ return a.x < b.x; }void pre() //离散化{ sort(x, x + xnum, cmp); sort(y, y + ynum); ynum = unique(y, y + ynum) - y; for(int i = 0; i < ynum; i++) { id[ y[i] ] = i+1; ylen[i+1] = i == ynum-1? 0 : y[i+1] - y[i]; }}void up(int ul,int ur,int id,int l,int r,int v){ if(r < ul || l > ur) return; if(l >= ul && r <= ur) { cover[id] += v; if(l == r) { if(cover[id] >= 2){len[id] = ylen[l];return;} else {len[id] = 0; return;} } } int m = l+r>>1; if(ul <= m) up(ul, ur, id << 1, l, m, v); if(ur > m) up(ul, ur, id<<1|1, m+1, r, v); len[id] = len[id<<1] + len[id<<1|1];}int main(){ int t,n; scanf("%d",&t); while(t--) { xnum = 0, ynum = 0; scanf("%d",&n); for(int i = 1; i <= n ; i++) { double a,b,c,d; scanf("%lf%lf%lf%lf",&a,&b,&c,&d); x[xnum++] = node(a,b,d,1); x[xnum++] = node(c,b,d,-1); y[ynum++] = b; y[ynum++] = d; } pre(); double ret = 0; double li = x[0].x, last = 0; for(int i = 0; i < xnum; i++) { ret += (x[i].x-li)*last; int id1 = id[x[i].y1], id2 = id[x[i].y2]; up(id1,id2-1,1,1,ynum,x[i].v); last = len[1]; li = x[i].x; } printf("%.2f\n",ret+eps); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- POJ
- Oracle那些事(7)-Navicat的使用
- 输入三个字符串,按由小到大的顺序输出
- Spring-整合Hebernate-5
- scrapy+mongodb爬取红袖天香
- HDU
- 使用yeoman搭建react-webpack框架的学习
- 算法设计与应用基础系列12
- Sublime Text 3常用插件安装
- centos 下 安装使用GoogleMock
- GitHub-fork/star/watch/follow
- POJ
- input、textarea标签placeholder兼容IE8浏览器js插件代码
- 控制台程序求解有理式(带括号,带小数)