【題意】
在乙個長為h,寬為w的白牆上選乙個矩形區域塗顏色,後塗的顏色會覆蓋先塗的,題目給出n(n<=100)個矩形區域和對應的顏色。
求最後牆上每種顏色的面積是多少,共有多少種顏色。
【思路】
將牆分成一塊一塊的矩形區域,對每個區域判斷最後塗的顏色是什麼,將其面積加到對應的顏色上。關鍵是怎樣將矩形分塊:
將豎線(所有矩形的left和right)離散化,從左到右列舉相鄰的豎線;
對固定的兩條豎線,列舉覆蓋這兩條豎線的矩形,再離散化橫線(所有合法矩形的top和bottom);
對當前的每個矩形區域,遍歷所有的合法矩形,判斷哪個是最後塗的。
時間複雜度是o(2n*2n*n)即o(n^3)。
【accepted】
1 #include2 #include3 #include4 #includeview code5 #include6 #include7
8using
namespace
std;
9int
h,w;
10int
n;11
const
int maxn=4e2+5;12
intcnt;
13struct
rec14
21 }rec[maxn/2
];22
intarea[maxn];
23 vectorv;
24int
w[maxn];
25int
h[maxn];
26void
init()
2731
intmain()
3240
init();
41 scanf("
%d",&n);
42for(int i=1;i<=n;i++)
4348
getchar();
49 sort(w+1,w+cnt+1
);50 cnt=unique(w+1,w+cnt+1)-(w+1
);51
for(int i=1;i)
5263
}64 sort(h+1,h+tot+1
);65 tot=unique(h+1,h+tot+1)-(h+1
);66
int sz=v.size();
67for(int k=1;k)
6878}79
}80if(pos!=-1)81
84}85}
86if
(cas)
8790 printf("
case %d:\n
",++cas);
91int ans=0;92
for(int i=1;i<=100;i++)
9399
}
100if(ans==1
)101
104else
105
108}
109return0;
110 }
在基於雜湊的Map中使用鎖分段技術
1 降低鎖競爭的程度 減少鎖的持有時間,降低鎖的請求頻率,使用帶有協調機制的獨佔鎖。縮小加鎖 的範圍 縮小鎖的粒度,對相互對立的共享變數使用不同的鎖 對單個鎖分解為兩個鎖,到分解為多個鎖的鎖分段,使同一時刻可以讓更多執行緒同時操作不同分段鎖鎖定的分段。2 基於雜湊的map實現,其中使用了鎖分段技術。...
分段dp(分段動態規劃)
基本分析 這題看似我們可以用區間dp的方式,將資料分左部分,右部分,然後用加號或乘號連線起來,但此時的問題就是每部分允許有多少乘號,這個又得列舉。所以這樣的方法可做,但複雜度要變成o n3 m2 那麼對於這類分區間時,又對區間內運算元量有限制的dp,我們可以用分段dp的方式,用dp i j 表示前i...
雜湊雜湊雜湊雜湊
雜湊,是解決字串 實際上是各種類 問題的重要工具,講字串儲存讀取速度降低到了線性,雜湊的用法十分豐富,可以用了進行狀態壓縮等。include include include includeusing namespace std 這與jdk string.hashcode 的函式在足夠大的資料下失配率...