第14回Blue Bridge Cup C++グループAの解答

Jがコインを投げる

書けない

I ピクセル

行 i を列挙する

バイナリ列挙状態

次に check(i) は正当であり、正当であれば dfs(i+1)


check は最初の行 == A[i][j] かどうかを判断するコアです
i 行目が A 以下かどうかを判断し、c+3>=A
次の行が以下かどうかを判断しますA および c+6>=A に

H XOR と和

例えば

5
1 2 3 4 5
bit=0 の配列は 10101 になります
bit=1 の配列は 01100 になります

ビット = 0 だけを考慮すると、モジュロ 2 の意味で、プレフィックス合計は 11001 になり、
配列 c[2] が開きます。
このビットの寄与は合計 +=c[1-b[i]] になり
、c[b を記録します。 [私]]++

ans+=(1<<ビット)*合計

G

Kruskal は最大木を再構築します. 各クエリについて,
最初は lca を期待していませんでした. また, u から v への接続性が mid より大きい重みを持つエッジで構築できるかどうかを判断するために答えを分割したいと思います.

いいえ、乱暴にプレイしました

ツリー上での発見的マージ
ma[u] と sz[u] を維持します
ma は最大色数を表します
sz はサイズを表します
mp[u].size() は色セグメントの
判断を表します (sz%mp.size()==0 && sz /mp.size()==ma) ans++

D

間隔 dp 前処理

for(len=2~n)
	for(l=1~)
		int r=l+len-1;
		if(s[l]>s[r])f[l][r]=1;
		else if(s[l]==s[r])f[l][r]=f[l+1][r-1]

for(i=2~n)
	for(j)
		ans+=f[j][i];

cout<<ans

おすすめ

転載: blog.csdn.net/supreme567/article/details/130027829