17 10 20題目泛做

2021-08-09 14:50:09 字數 2003 閱讀 3967

終於停課了……於是來補一發題解

###hzwers模擬t1:逗比三角形

題意:給若干個三角形的三邊長然後問如何把這些三角形放在乙個寬度l

ll高度無限的矩形框裡面使得這些三角形有一條邊緊貼矩形底邊的同時在矩形框裡面覆蓋的面積最大,並算出這個面積

分析:這非常結論題……顯然我們把三角形裡面最短的那條邊放在下面是最優的。然後我們考慮把三角形切成寬為d

dd的矩形,那麼很顯然我們會選高度前[ld

][\frac]

[dl​

]個矩形拼接出來。然後我們考慮最後乙個選的矩形高度為h

hh,那麼我們會發現最優方案裡所有三角形相交高度都是h

hh,就是說在這個高度以下的區域都被填滿了,其上是一些不會相交的三角形,然後二分一下就好了

至於為什麼相交高度會是h

hh,只要我們注意到比h

hh高的三角形都可以隨意移動就可以了,而且很顯然移動後這樣會最好(重疊部分最小)

用了海**式先推面積再算高……

**:(未除錯)

###hzwers模擬t2:普通三角形

題意:給乙個n×m

n\times m

n×m的網格,問其中格點可以構出多少三角形

分析:水題,而且是原題,非常好做

我們只要選三點出來再去掉三點共線的情況就好了

共線中只有斜著共線的比較特殊。我們只需要參照bzoj2190儀仗隊那題的做法,我們只需要利用最大公約數求一下乙個向量裡面重複了多少次然後直接平移乘一下就好了

**:###hzwers模擬t3:憂桑三角形

題意:維護一棵靜態樹,支援兩種操作,改點權,還有問一條路徑上是否存在三個點,使得對其點權a≤b

≤c

a\leq b\leq c

a≤b≤

c,滿足a+b

>

ca+b>c

a+b>

c,其中點權在int範圍內

分析:我們嘗試構造乙個點權數列,使得兩兩點不滿足上面的條件,也即令a+b

≤c

a+b\leq c

a+b≤

c觀察到這和斐波那契很像,事實上要使其最長,其邊界情況也就是斐波那契(就是取等號的時候)

而點權只在int範圍內,所以最多大概50

5050

個點以上就必定是y,如果沒這麼多點就暴力判斷,可以列舉掉也可以把點拉出來排個序然後比較相鄰三個

並不用打lca,暴力跳即可(發現已經跳了超過50了就直接可以結束了)

###tsinsen d3521:最長雙回文串

題意:給乙個字串問裡面最長的雙回文串有多長,這裡雙回文串就是兩個相鄰的回文串拼在一起

分析:不會打回文自動機/回文樹於是用manacher做了

跑一遍馬拉車然後對每個』#'號我們看它能向左向右各延伸多長的回文串

然後每個點找回文半徑之後先更新一遍塔兩端的點

接著由回文半徑的性質再掃一遍更新就可以辣

話說這裡的馬拉車好短啊orz:

###tsinsen d3523:位元集合

題意:維護乙個集合,支援插入刪除元素 還有全部增加乙個值 以及查詢有多少個數某一位是1

11,元素大小在int範圍內

分析:非常好做 我們考慮下查詢的時候怎麼查能夠把這道題目轉成熟悉的區間查詢

然後資料範圍這麼小我們可以考慮二進位制分組,在mod 2k+

12^

2k+1

意義下我們發現第k

kk位相同的都聚在了一起,那麼就很容易做辣

用16

1616

個樹狀陣列維護fk,

if_

fk,i

​表示在mod 2k+

12^

2k+1

意義下有多少個數的值是i

ii,然後插入刪除都是單點修改,全部增加乙個值就是區間移位,記下迴圈移了多少,查詢就是區間查詢

複雜度是o(n

k2

)\text o(nk^2)

o(nk2)

,bit常數小跑得飛快

17 10 24題目泛做

題意 求二維和與rmq,保證每次查詢的區間長寬不超過整個矩陣長寬的一半 分析 二維和沒難度,二維rmq這裡因為資料有問題 只好開short水過,同時順便加上了連續訪問的黑科技然後卡了過去 不過正解是經典的思想,就是一種簡單的變形 但好難寫啊qaq 我們考慮f i,j,k 表示以 i j 為左上角,邊...

CS Academy 題目泛做

乙個神犇同學向我推薦了這個oj。這個oj上的題目都是挺經典的。資料 標程 題解都有,已經是很方便了。出於強迫症,下面的題目按照字典序排列。太簡單的題大家應該都能一看就會,就直接略了。這個網經常崩,做起來好麻煩,所以這個坑先停了吧 addition 略。a game 顯然如果當前還有b就不會去選a。也...

題目泛做 蛋糕(分治NTT)

原題是thupc2018蛋糕,然後這裡擴充套件到了n維,沒什麼區別。核心思想就是乙個塊在其他維度上隨便亂跑,在這個維度上也能隨便亂跑。所以我們實際上要考慮的就是在每一維上出現0,1,2個面的方案數。每一維可以任意選擇,所以直接分治ntt把每一維的生成函式乘起來就行了。include define l...