牛客小白月賽13題解(更新中。。)

2021-09-18 05:06:35 字數 1887 閱讀 9438

小白月賽太真實了 連小白都算不上

先放上會的,不會的乙個乙個補,後面會一直更新

發現了好多不會的演算法,在解決這個題的同時也會更新的文章來系統的學習那一方面

還是放個鏈結吧 傳送門 a.

這是真簽到了,直接交**是不行的,打個表就能發現規律

偶數輸出-1,奇數輸出1

後面想了想這應該算乙個數學公式吧,你要是把斐波那契數列通項公式帶進式子進行化簡應該是可以驗證其正確性的

當然了,奇偶的時候要記得可以 n&1 的操作

c.就是把字串看成乙個圈,然後列舉每個端點的最長子回文串就行了

在求最長子回文串的時候可以用馬拉車演算法,複雜度是o (n)

後面會寫一篇文章總結這個演算法

這裡就先放上乙個模板

#include

using namespace std;

const

int max =

50005;/*

*返回字串str的最長回文子串的長度

*/int

get_maxlen

(const

char

*str)

temp_len=end-begin-1;

if(temp_len>max_len)

max_len=temp_len;

//偶數長度對稱字串處理

begin=current;

end=current+1;

while

(begin>=str &&

*end &&

*begin==

*end)

temp_len=end-begin-1;

if(temp_len>max_len)

max_len=temp_len;

current++;}

return max_len;

}int

main()

int f=

get_maxlen

(ss);if

(maxmax = f;

} cout << max << endl;

return0;

}

d.

官方題解處理字首和字尾然後列舉不選點。。。所以是o(n) tql

然而賽時 在交了一發暴力t掉後 用set剪枝過了(就是遍歷時看看有沒有重複的元素,重複的你直接去掉就行了,區域性on把)。。。只能說資料水了點吧

所以還是放上賽後寫的**吧

#include

using namespace std;

const

int max=

5e6+6;

int a[max]

, b[max]

, c[max]

;int main (

)for

(int i = n; i >

0;i--

)int ans =0;

for(

int i =

1; i <= n;i++

) cout << ans << endl;

return0;

}

i. 小a取石子

博弈論…

我會寫在另一篇文章裡傳送門

**放一下`

#include

using namespace std;

const

int max =

5e6+6;

int a[max]

;int

main()

if(nim==0&&

(flag==

0||k==0)

)else

return0;

}

牛客小白月賽22題解

a 操作序列 單點增加,區間求和,下標最小的非零數變成零,單點查詢。說完了不就線段樹嘛。由於範圍比較大,先存下來,離散化,再進行樹上的操作。注意這裡的左右區間離散化值不一樣的,左邊離散化要找到大於等於左邊界的值,右邊離散化要找到小於等於右邊界的值。b 樹上子鏈 類似於 dp 求樹直徑 c 交換遊戲 ...

牛客小白月賽24 題解

牛客小白月賽24 題解 最後還剩一道計算幾何,其實可以ak,但沒必要 b 簽到 include using namespace std const int n 2e5 10 int a n int main printf d n ans return 0 c 還行 includeusing name...

牛客小白月賽22 題解

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