2023年10月5日日常總結兼洛谷P1950題解

2021-09-27 19:21:22 字數 1636 閱讀 6395

【題目】:

小明今天突發奇想,想從一張用過的紙中剪出乙個長方形。

為了簡化問題,小明做出如下規定:

(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了,最...