牛客小白月賽22題解

2021-10-03 03:30:52 字數 894 閱讀 2444

a、操作序列

單點增加,區間求和,下標最小的非零數變成零,單點查詢。

說完了不就線段樹嘛。由於範圍比較大,先存下來,離散化,再進行樹上的操作。

注意這裡的左右區間離散化值不一樣的,左邊離散化要找到大於等於左邊界的值,右邊離散化要找到小於等於右邊界的值。

b、樹上子鏈

類似於 dp 求樹直徑

c、交換遊戲

d、收集紙片

暴搜,由於只有10個點,10案例,所以最多計算 10*10!次,直接列舉全排列算就可以了。

e、方塊塗色

多組輸入

f、累乘數字

直接輸出

g、倉庫選址

考慮暴力的做法,列舉每個位置為倉庫的位置,看起來似乎會超時,那考慮一下優化。

若倉庫在點 (x,y) 處,若現在將倉庫移動到點 (x+1,y) ,那麼對於左下角為(1,1),右上角為(x,m)的矩陣,所有點到達倉庫的距離都+1,對於左下角為(x+1,m),右上角為(n,m)的矩陣,所有點到達倉庫的距離都-1.

所以我們考慮二維字首和,暴力出倉庫在(1,1)位置的答案,然後每次移動乙個位置用二維字首和來計算貢獻就可以了。

(暴力也能過。。。)

h、貨物種類

考慮最多只有1e5次進貨,所以 d 小於1e9 可以忽略了。

由於需要算有最多種類的倉庫,我們考慮將同一種貨物的所有進貨區間合成乙個區間,然後直接對這個區間add+1,當然,可能合併後的區間是不連續的,我們可以分多次,對它每乙個連續區間add+1就可以了。

可以直接維護max max_id,但由於這個線段樹**是直接魔改了a題的線段樹,並且最後再求n次單點值也不會超時,所以懶得改了(反正不會超時)

i、工具人

佔坑。j、計算a+b

先判一遍是不是只有乙個+,然後字串模擬,注意考慮進製和字首0情況。

牛客小白月賽22 題解

題解鏈結 題目知識點 題目難度 a 操作序列 stl,map,set,模擬 普及 提高 b 樹上子鏈 樹形dp,樹的直徑 普及 提高 c 交換遊戲 記憶化搜尋,狀態壓縮 普及 提高 d 收集紙片 全排列,dfs,狀壓dp,tsp問題 普及 提高 e 方塊塗色 簡單數論,容斥原理 入門f 累乘數字 找...

牛客小白月賽22

d題 題目鏈結 解題思路 直接暴搜,因為只有10個卡片嘛10 所以最多計算 10 10!次,直接列舉全排列算就可以了 include include using namespace std const int inf 0x3f3f3f3f int x 22 y 22 c 22 int main do...

牛客小白月賽22

我們知道將乙個大於1的數乘以另乙個大於1的數會使乘積大於任意乙個乘數。現在給出兩個數字 n,d,你能否計算將n乘以d次100的結果。多組輸入 每組輸入在一行中給出 n,d,1 n,d 100。每組輸入輸出一行代表答案。5 1 11 1 85 2 500 1100 850000 author 一屆書生...