syhd142 |
|
|||
日歷
統計
導航常用鏈接留言簿(2)隨筆檔案(23)文章分類(270)
文章檔案(122)我的豆瓣搜索最新評論
閱讀排行榜
評論排行榜 |
經典問題,矩形面積并。 解法:一、矩形分割,每個矩形的兩個橫坐標和兩個縱坐標排序,這樣得到2n*2n個區間,對這些區間依次判斷是否包含在n個矩形中間即可。 二、掃描線。具體還沒實現過。 #include <stdio.h>
#include <algorithm> #define N 105 struct rectangle { double x, y; double r; }rec[N]; double x[2 * N], y[2 * N]; int main() { int n, cas = 1; while(scanf("%d", &n), n) { double ans = 0; for(int i = 0; i < n; i++) { scanf("%lf %lf %lf", &rec[i].x, &rec[i].y, &rec[i].r); x[i] = rec[i].x - rec[i].r, x[i + n] = rec[i].x + rec[i].r; y[i] = rec[i].y - rec[i].r, y[i + n] = rec[i].y + rec[i].r; } std::sort(x, x + 2 * n); std::sort(y, y + 2 * n); for(int i = 0; i < 2 * n - 1; i++) { for(int j = 0; j < 2 * n - 1; j++) { for(int k = 0; k < n; k++) { if(rec[k].x - rec[k].r <= x[i] && rec[k].x + rec[k].r >= x[i + 1]) if(rec[k].y - rec[k].r <= y[j] && rec[k].y + rec[k].r >= y[j + 1]) { ans += (x[i + 1] - x[i]) * (y[j + 1] - y[j]); break; } } } } printf("%d %.2lf\n", cas++, ans); } return 0; }
|
![]() |
|
Copyright © Fucker | Powered by: 博客園 模板提供:滬江博客 |