tjut 1542
来源:互联网 发布:淘宝食品类目规则 编辑:程序博客网 时间:2024/06/15 06:47
#include <iostream>#include <algorithm>using namespace std;const int maxn=110;struct LINE{ double x, y_down, y_up; int flag; bool operator<(const LINE &a)const { return x<a.x; }}line[2*maxn];struct TREE{ double y_down, y_up; double x; int cover; //用以表示加进线段树中的线段次数 bool flag; //此标记用来表示是否有超元线段;为了处理方便加上去的}tree[1000*maxn];int n;double x1, y1, x2, y2;int index1=0;double y[2*maxn];void build(int i, int l, int r){ tree[i].x = -1; //-1表示该区间已经没有线段 tree[i].cover = 0; //表示该区间上有多少条线段;左边线段加进去则++,右边线段加进去则-- tree[i].y_down = y[l]; tree[i].y_up = y[r]; tree[i].flag = false; if(l+1==r) { tree[i].flag = true; //flag==true表示达到了叶子节点 return; } int mid=(l+r)>>1; build(2*i, l, mid); build(2*i+1, mid, r);}double insert(int i, double x, double l, double r, int flag) //flag表示为左边还是右边{ if (r<=tree[i].y_down || l>=tree[i].y_up) return 0; if (tree[i].flag) { if (tree[i].cover > 0) //递归到了叶子节点 { double temp_x = tree[i].x; double ans=(x-temp_x)*(tree[i].y_up - tree[i].y_down); tree[i].x = x; //定位上一次的x tree[i].cover += flag; return ans; } else { tree[i].cover += flag; tree[i].x = x; return 0; } } double ans1, ans2; ans1 = insert(2*i, x, l, r, flag); ans2 = insert(2*i+1, x, l, r, flag); return ans1+ans2;}int main( ){ // freopen("d:\\in.txt","r",stdin); int count=0; while (scanf("%d", &n)!=EOF&&n) { index1 = 1; for (int i=1; i<=n; i++) { scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2); y[index1] = y1; line[index1].x = x1; line[index1].y_down = y1; line[index1].y_up = y2; line[index1].flag = 1; //1表示左边 index1++; y[index1] = y2; line[index1].x = x2; line[index1].y_down = y1; line[index1].y_up = y2; line[index1].flag = -1; //-1表示右边 index1++; } sort(&y[1], &y[index1]); //把所有的纵坐标按从小到大排序,把1写成了0,WA一次 sort(&line[1], &line[index1]); build(1, 1, index1-1); double ans=0; int i; for (i=1;i<index1;i++) { ans += insert(1, line[i].x, line[i].y_down, line[i].y_up, line[i].flag); } printf("Test case #%d\nTotal explored area: %.2f\n\n", ++count, ans); } return 0;}
0 0
- tjut 1542
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- 引用ARC环境下的第三方时 报错
- 浅谈 指针-你真的了解指针吗?
- Android Studio五分钟带你从菜鸟到高级调试
- 神经网络与深度学习第四天读书笔记-----迈向深度学习:反向传播算法
- Android TextureView简易教程
- tjut 1542
- 利用MOG2背景模型提取运动目标的OpenCV代码
- 网络工程1.14——网际层
- 一维费用的背包问题模板
- ORA-30009: Not enough memory for CONNECT BY operation
- 获取文件夹下de所有文件名
- x264 参数详解【很强大、很细致,不再为不懂啥意思很烦恼】
- Y - Farey Sequence
- struts2和spirngmvc的区别