日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

上浮法或漂浮法

發(fā)布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上浮法或漂浮法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:給一張白紙,按順序往上面貼有顏色且不透明的矩形,求最后能看到的顏色以及每種顏色的面積。

思路:對每個矩形而言,它最后能有多少被看見,取決于它后面的矩形。所以從后往前處理,就像一個矩形從最底下上浮,碰到它上面的矩形就分成若干塊,到水面上時更新答案。遞歸表示剩余的可見矩形,然后模擬上浮過程。

1 struct Node { 2 int x1, y1, x2, y2, color; 3 void inp() { 4 scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &color); 5 x1 ++; 6 y1 ++; 7 } 8 }; 9 Node node[1007]; 10 int n, cnt[2600]; 11 12 void dfs(int pos, int color, int l, int r, int u, int d) { 13 while (pos < n && (node[pos].x2 < l || node[pos].x1 > r || node[pos].y1 > u || node[pos].y2 < d)) pos ++; 14 if (pos == n) { 15 cnt[color] += (r - l + 1) * (u - d + 1); 16 return ; 17 } 18 if (l < node[pos].x1) { dfs(pos + 1, color, l, node[pos].x1 - 1, u, d); l = node[pos].x1; } 19 if (r > node[pos].x2) { dfs(pos + 1, color, node[pos].x2 + 1, r, u, d); r = node[pos].x2; } 20 if (d < node[pos].y1) { dfs(pos + 1, color, l, r, node[pos].y1 - 1, d); d = node[pos].y1; } 21 if (u > node[pos].y2) { dfs(pos + 1, color, l, r, u, node[pos].y2 + 1); u = node[pos].y2; } 22 } 23 24 int main() { 25 //freopen("in.txt", "r", stdin); 26 int T, a, b; 27 cin >> T; 28 while (T--) { 29 cin >> a >> b >> n; 30 rep_up0(i, n) { 31 node[i].inp(); 32 } 33 mem0(cnt); 34 rep_down0(i, n) { 35 dfs(i + 1, node[i].color, node[i].x1, node[i].x2, node[i].y2, node[i].y1); 36 } 37 int sum = 0; 38 rep_up1(i, 2500) sum += cnt[i]; 39 cnt[1] += a * b - sum; 40 rep_up1(i, 2500) { 41 if (cnt[i]) { 42 printf("%d %d\n", i, cnt[i]); 43 } 44 } 45 } 46 return 0; 47 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/jklongint/p/4471242.html

總結(jié)

以上是生活随笔為你收集整理的上浮法或漂浮法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。