2019牛客暑期多校訓練營(第八場)

2022-05-02 20:33:09 字數 1546 閱讀 8192

practice link

solvedab

cdef

ghij

k4/11øo

ooa. all-one matrices

點這裡》_<

b. beauty values

點這裡》_<

c. cdma(構造)

題意:構造由-1,1組成的m*m矩陣,使得任意兩個不同(這裡指的是數字有不同的地方)的行對應位置乘積和為0

思路:首先 m=2 時的答案是已經知道了的,考慮用 m 構造出 2m 的解: 

不妨設方陣 a 為 m 的解,那麼下面這個方陣則是 2m 的乙個解:

[a a]

[a -a]

通過這種方法去構造我們就能得到正解

code(比賽的時候直接打表交了)

#include #include 

using

namespace

std;

const

int maxn = 2000

;int

h[maxn][maxn];

intmain()

}cnt = cnt<<1

; }

for (int i = 1; i <= g; i++)

if(i!=g)

printf("\n

");}

}

view code

g. gemstones

題意:

思路:棧的應用

從左到右依次把字元加入棧中,如果某個時刻棧頂的三個字元相同,則將其彈出棧頂並把答案加 1,最後輸 出一下答案即可

開始的時候我是想把重複字串的個數儲存起來,當個數為3的時候就彈棧,但沒考慮到三個相同元素必須相連才能彈棧,最後想說的是,很多時候用陣列去模擬棧加個top標識反而比呼叫stack要好用些,寫起來也方便

code

#include #include 

#include

using

namespace

std;

const

int maxn = 1e5+5

;int

ans, flag;

inta[maxn];

char

str[maxn], s[maxn];

intmain()

printf("%d

", ans);

}

view code

其實可以寫的更簡潔一點,都不需要開兩個陣列,把str每個元素掃瞄完後對應的那個位置就沒有用,因此可以反覆利用,最後判斷下條件就可以了,只不過那樣寫會稍微難懂那麼一點點

2019牛客暑期多校訓練營(第八場

現場ac a,b,c,g rank 185題號a bcde fghi jkl狀態 a 2維單調棧 從上到下 每行建乙個單調棧,維護的是1向上擴充套件最遠的高度。得到每個高度所向左向右擴充套件的最遠距離,即每個點拓展 先向上到頂 的最大全1子矩陣,求出這個個數ans,再減去同樣高度的,和可向下拓展的 ...

2019牛客暑期多校訓練營(第八場

solved by rdc 84min 2 做法 題意構造矩陣,使得任意兩行點積為 0 做法樣例具有很強的暗示性,我們可以用 k 階矩陣,構造 k 1 階矩陣。題意三維空間,插入點,查詢與某個點曼哈頓距離最小點。比賽中做法 做法2.0 做法 upsolved 問題的轉化 注意到標號為 x 的點,在每...

2019牛客暑期多校訓練營(第八場)補題

a題 題意 求所有全為1的矩陣且每個子矩陣都不會被其他矩陣完全包含的子矩陣的個數。分析 最近遇到的全1子矩陣的題有點多額.可是還是不怎麼會做。但基本都用了單調棧.設h i j 表示第i行以j點為底點的最高連續的1的個數,可以用單調棧求使j點以h i j 為高度的矩形的左右邊界 懸線法也可以 然後,統...