【題目】:
小明今天突發奇想,想從一張用過的紙中剪出乙個長方形。
為了簡化問題,小明做出如下規定:
(1)這張紙的長寬分別為n,m
n,mn,
m。小明講這張紙看成是由n×m
n \times m
n×m個格仔組成,在剪的時候,只能沿著格仔的邊緣剪。
(2)這張紙有些地方小明以前在上面畫過,剪出來的長方形不能含有以前畫過的地方。
(3)剪出來的長方形的大小沒有限制。
小明看著這張紙,想了好多種剪的方法,可是到底有幾種呢?小明數不過來,你能幫幫他嗎?
【思路】:
記未填充的點為好點,已填充的點為壞點。
記u p[
i]
up[i]
up[i
]為第i
ii列可以往上延伸多少
分別算出l[i
]l[i]
l[i]
和r [i
]r[i]
r[i]
,分別表示upup
up中左邊第乙個不大於upup
up的數和右邊第乙個小於upup
up的數(可以用單調棧寫)
答案即為∑i=
1nup
[i]×
(i−l
[i])
×(r[
i]−i
)\sum ^n _ up[i] \times (i-l[i]) \times (r[i]-i)
∑i=1n
up[i
]×(i
−l[i
])×(
r[i]
−i)【**】:
//by hpxxzyy
#include
#include
#include
#include
using
namespace std;
#define ll long long
const
int n=
1020
;ll l[n]
,r[n]
,up[n]
;ll k[n]
,n,m,top,i,j;
int d[n]
[n];ll ans;
inline
void
calc_l()
k[++top]
=i;}
while
(top)
}//利用單調棧求l陣列
inline
void
calc_r()
k[++top]
=i;}
while
(top)
}//利用單調棧求r陣列
inline ll calc_answer()
//統計答案
intmain()
for(i=
1;i<=n;i++
) ans+
=calc_answer()
;} cout
}
2023年10月16日總結
今天晚上打比賽又是原題,可是做了好幾次原題沒有一次可以全部做完,甚至感覺多做一道都是奢侈。感覺自己越來越不配,不配去繼續呆在這裡,因為自己真的是太懶惰了,不會的題不想著去解決,永遠只停留在之前,只停留在做水題的階段,只能夠享受做水題提交ac的喜悅感,感覺太容易滿足,一點都沒有成長。今天費老師也提到山...
2023年10月23日總結
這幾天還是接著看數論,有時候寫 都會被自己蠢哭,昨天做51nod 數論做不下去了,就在組合數學裡找了幾個 然後好幾次卡死在細節上,最好笑的是有乙個題只是樣例過了。這幾天看知識感覺沒有規律,就是感覺知識很混亂,沒有一點條理,越來越感覺數論的知識體系很混亂,可能是自己還沒有明白吧,就是很難受,越看越難受...
2023年5月5日日誌
最近幾日很糾結,事情很多,因為我這個剛滿23歲的人同時也要大專畢業了,不過能否拿到畢業證卻還是未知之數 事情很多 多修了4個學分,昨天在財務處一下子就花掉了我260悶,真是割肉的痛啊,瞬間就從吃喝不愁跌落到渾身上下只有10來塊的窘境。不過比起我寢室裡的另乙個同學的520悶,還只能算是小case了,最...