牛客國慶集訓派對Day2 Solution

2022-05-01 06:15:11 字數 1728 閱讀 6715

a    矩陣乘法

思路:1° 牛客機器太快了,暴力能過。

1 #include 2

using

namespace

std;34

#define n 500056

intn, p, m;

7int a[n][100], b[100

][n], ans[n][n];89

void

run()

1029}30

31int

main()

32

view code

2°考慮到p很小,可以將它分塊,比如說分成8bit一塊,那麼對應的只有256種情況,可以預處理一下,然後乘法變成取值

複雜度大概在(4096 * 4096 * 8) 左右

1 #include 2

using

namespace

std;34

#define n 500056

intn, p, m;

7int a[n][100], b[100][n], ap[n][10][256], bp[10

][n], ans[n][n];89

void

run()

1039}40

41int

main()

42

view code

b    字串的冪

留坑。c    生命遊戲

留坑。d    數格點

留坑。e    資料排序

留坑。f    平衡二叉樹

思路:顯然,答案最大肯定是根節點下左子樹是滿二叉樹,右子樹是最小平衡二叉樹

深度為n的二叉平衡樹的最小節點數 = 左平衡樹的最小節點數 + 右平衡樹的最小結點樹 + 當前樹的根節點樹(1)

顯然 ,右平衡樹的高度可以比左平衡樹少d

當$n <= d$ 的時候 $f[n] = max(n, 0)$

所以$f[n] = f[n - 1] + f[n - d - 1] +1$

滿二叉樹的結點個數是$2^n$

1 #include 2

using

namespace

std;

3using ll = long

long;4

5int

n, d;

6 ll f[100];7

8 ll qpow(ll base

, ll n)917

return

res;18}

1920 ll work(int

h)21

2829

void

run()

3036}37

38int

main()

39

view code

g    陣列合併

留坑。h    卡牌遊戲

思路:考慮抽到一張卡片的概率是$\frac$ 那麼期望就是 $\frac$ 抽到一張之後再抽一張的概率是$\frac$

1 #include 2

using

namespace

std;34

intt, n, m, k;56

intmain()717

return0;

18 }

view code

i    遊戲

留坑。j    魔法陣

留坑。k    排隊

留坑。

牛客國慶集訓派對Day2

題意 給出最大4096 64和64 4096的矩陣,其中有乙個矩陣只含有0和1,問你它們相乘所得到得矩陣所有元素異或 思路 一開始我想到的是能不能將01矩陣的一排都用二進位制表示,但是發現2的64次方大於4096,反而增大了複雜度,於是沒有做出這題,題解是將矩陣分塊,最多分成8塊,這樣01矩陣的種數...

牛客國慶集訓派對Day1

a 看樣例過題 include include include include include using namespace std typedef long long ll typedef pairpii const int maxn 1e5 10 vectorg maxn int a 10 i...

牛客國慶集訓派對Day4

a 把b n include include include includeusing namespace std int main d 由於是個完全圖,選擇乙個權值最小的點,其他所有的點向它連線就行了。注意點為1的時候輸出0 include include include includeusing...