선분 트 리 앨범 - hdu 1255 커버 면적
11953 단어 HDU
이 문 제 는... 면적 을 합치 면 면적 교 제 는 문제 가 되 지 않 습 니 다.원래 판단 한 선분 트 리 의 cover 값 을 1 보다 크 면 2 보다 크 면 됩 니 다!
아무것도 할 줄 모 르 는 학생, 수필 을 보 세 요.
View Code
1 #include<iostream>
2 #include<string>
3 #include<stdlib.h>
4 using namespace std;
5
6 typedef struct
7 {
8 double x;
9 double y_up;
10 double y_down;
11 int l_r;
12 }LINE;
13
14 typedef struct
15 {
16 double x;
17 double y_up;
18 double y_down;
19 int cover;
20 bool has_child;
21 }TREE;
22
23 int cmp(const void *a,const void *b)
24 {
25 return *(double *)a>*(double *)b? 1: -1;
26 }
27
28 TREE tree[1000*1001];
29 LINE line[2002];
30 int n,index;
31 double x1,y1,x2,y2;
32 double y[2002];
33
34 void build(int i,int l,int r)
35 {
36 tree[i].cover=0;
37 tree[i].x=-1;
38 tree[i].has_child=true;
39 tree[i].y_up=y[r];
40 tree[i].y_down=y[l];
41 if(l+1==r)
42 {
43 tree[i].has_child=false;
44 return;
45 }
46 int mid=(l+r)>>1;
47 build(2*i,l,mid);
48 build(2*i+1,mid,r);
49 }
50
51 double insert(int i,double l,double r,double x,int l_r)
52 {
53 if(tree[i].y_up<=l || tree[i].y_down>=r)
54 return 0;
55 if(!tree[i].has_child)
56 {
57 if(tree[i].cover>1)
58 {
59 double ans=(x-tree[i].x)*(tree[i].y_up-tree[i].y_down);
60 tree[i].x=x;
61 tree[i].cover+=l_r;
62 return ans;
63 }
64 else
65 {
66 tree[i].cover+=l_r;
67 tree[i].x=x;
68 return 0;
69 }
70 }
71 else
72 return insert(2*i,l,r,x,l_r)+insert(2*i+1,l,r,x,l_r);
73 }
74
75 int main()
76 {
77 int t,i;
78 //freopen("D:\\in.txt","r",stdin);
79 cin>>t;
80 while(t--)
81 {
82 cin>>n;
83 index=1;
84 for(i=1;i<=n;i++)
85 {
86 scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
87 line[index].x=x1;
88 line[index].l_r=1;
89 line[index].y_up=y2;
90 line[index].y_down=y1;
91 y[index]=y1;
92 index++;
93
94 line[index].x=x2;
95 line[index].l_r=-1;
96 line[index].y_up=y2;
97 line[index].y_down=y1;
98 y[index]=y2;
99 index++;
100 }
101 qsort(y+1,2*n,sizeof(y[0]),cmp);
102 qsort(line+1,2*n,sizeof(line[0]),cmp);
103 build(1,1,index-1);
104 double ans=0;
105 for(i=1;i<index;i++)
106 {
107 ans+=insert(1,line[i].y_down,line[i].y_up,line[i].x,line[i].l_r);
108 }
109 printf("%.2lf
",ans);
110 }
111 return 0;
112 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU] 4089 활성화 확률 DPdp[i][j]를 모두 i개인의 대기열인 Tomato가 j위 서버가 마비될 확률로 역추를 사용하면 우리는 상태 이동 방정식을 얻을 수 있다. i == 1 : dp[1][1] = dp[1][1] * p1 + dp[1]...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.