牛客小白月賽28

2022-03-05 08:30:14 字數 3297 閱讀 1885

計算模意義下的 $1 - \frac$ 即可。

#include using

namespace

std;

const

int mod = 1e9 + 7

;int binpow(int a, int

b)

return

res;

}int inv(int

n) int

main()

return0;

}

以此類推,最終推得規律為 $x\ \%\ 3 = y\ \%\ 3$ 必敗。

#include using

namespace

std;

intmain()

return0;

}

遞迴求解每個配對括號內的和,再乘以括號外的倍數即可。

有可能括號外沒有數字,所以 $dfs$ 中的 $mul$ 的初值根據判斷條件有兩種形式。

#include using

namespace

std;

constexpr

int n = 1e5 + 100

;string

s;int

match[n];

void

match()

else

if (s[i] == ')'

) }

}long

long dfs(int l, int

r)

if (s[l] == '('

)

long

long mul = 1

;

if (l <=r and isdigit(s[l]))

}res += val *mul;

}return

res;

}int

main()

\begin a + b = x \end

\begin a\ \&\ b = y \end

\begin a + b = a \oplus b + ((a\ \&\ b) << 1) \end

將 (1)(2) 代入 (3) 得:

\begin x = a \oplus b + (y << 1) \nonumber \end

移項得:

\begin a \oplus b = x - (y << 1) \nonumber \end

如果存在整數 $a,b$ 滿足條件,那麼得到的 $a \oplus b$ 一定滿足:

\begin a \oplus b \ge 0 \nonumber \end

\begin (a \oplus b)\ \&\ (a\ \&\ b) = 0 \nonumber \end

#include using

namespace

std;

intmain()

return0;

}

kmp模板題,稍微改一下求最長字首即可。(感覺以前哪場比賽好像考過這個)

#include using

namespace

std;

const

int n = 1e6 + 100

;int

next[n];

string

s, p;

void

init_next()

}int

kmp()

return

mx;}

intmain()

cout

<< ans << "\n"

;

return0;

}

單源最短路模板題。

#include using

namespace

std;

intmain()

vector

last(m + 1

);

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

last[a[i]] =i;

}function

get_distance = [&](int s, int

t) }

}return

dis[t];

};cout

<< get_distance(s, t) << "\n"

;

return0;

}

計算從 $(1,1)$ 到 $(n,m)$ 的路徑數目的狀態轉移方程為:

\begin dp_ = dp_ + dp_ \nonumber \end

那麼計算模數再加一維狀壓dp即可。

#include using

namespace

std;

constexpr

int mod = 1e4 + 7

;int

main()

vector

>> dp(n + 1, vector>(m + 1

)); dp[

1][1].set(a[1][1

]);

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

}cout

<< dp[n][m].count() << "\n"

;

return0;

}

並查集模板題。

乙個結點的父親不一定是 $fa[i]$,應該用 $find(i)$ 。

#include using

namespace

std;

constexpr

int n = 2e5 + 100

;int

fa[n], son_num[n];

int find(int

x) void union(int x, int

y) }

void

init()

}int

main()

int mx = *max_element(son_num, son_num +n);

cout

<< count(son_num, son_num + n, mx) * mx << "\n"

;

for (int i = 0; i < n; i++)

}return0;

}

牛客小白月賽3

a 我們規定母音字母有a e i o u,並且規定半母音字母y也是母音字母。cwbc在學習英語,xhrlyb為了讓cwbc的記憶更加深刻,於是她讓cwbc把每個字串的所有字母都變成乙個恰好不大於它本身的小寫母音字母。可是cwbc比較貪玩,並且他想讓你幫他完成這個任務。聰明的你在仔細閱讀題目後,一定可...

牛客小白月賽6

c 挑花 dfs或bfs 桃花一簇開無主,可愛深紅映淺紅。題百葉桃花 桃花長在桃樹上,樹的每個節點有乙個桃花,調皮的htbest想摘盡可能多的桃花。htbest有乙個魔法棒,摘到樹上任意一條鏈上的所有桃花,由於htbest法力有限,只能使用一次魔法棒,請求出htbest最多可以摘到多少個桃花。第一行...

牛客小白月賽16

很容易得到n 1時,因為小石先手,所以小石一定輸 而n!1時,假設n 5 小石先取1 小陽取2 4 小石去3 小陽輸,無論怎樣小石都有贏的機會 includeusing namespace std int main 打表求出1 1e3之間的所有三角形每層之和 include define ll lo...