torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

TopCoder SRM 671, Division 1, Level 1 : BearCries

問題概要

 ';' + 1 つ以上の '_' + ';' という文字列を顔文字であるとする.例えば ";_;" や ";____;" は顔文字であるが,";;" や ";_" は顔文字ではない.
 ';' と '_' からなる文字列 $\mathit{ message }$ が与えられる.$\mathit{ message }$ を重複しない複数の部分列に分けたとき,部分列全てが顔文字となっていて,かつ全ての文字が丁度 1 つの部分列に属するような分け方は何通りあるか?
 総数を $X$ として$X \bmod{ 10^9 + 7 }$ を求めよ.

  • $1 \leq \mathit{ message } \leq 200$
続きを読む

TopCoder SRM 670, Division 1, Level 2 ( Division 2, Level 3 ) : Treestrat

問題概要

 $N$ 頂点の木と 2 種類のトークンを使った 2 人ゲームをする.プレイヤーを A, B として,A は赤いトークンを,B は青いトークンを使う.
 木の頂点は $0$ から $N - 1$ で番号付けられている.ゲームの初期状態は 3 つの配列 $\mathit{ tree }$, $A$, $B$ により与えられる.$\mathit{ tree }$ は木の形を表し,$i$ ( $1 \leq i \leq N - 1$ ) について,2 頂点 $i$, $\mathit{ tree }_{ i - 1 }$ 間に辺があることを表す.$A$ は赤いトークンの初期位置を,$B$ は青いトークンの初期位置を表す( $a \in A$ なる頂点 $a$ に赤いトークンがある.$B$ と青いトークンについても同様).
 ゲームは Round と呼ばれる工程の繰り返しからなる.1 回のラウンドは,

  1. A が赤いトークンをいくつか選び,それぞれ隣接する頂点に移動させる
  2. B が青いトークンをいくつか選び,それぞれ隣接する頂点に移動させる

という 2 つのフェーズからなる.
 Round 終了後に,2 種類のトークンが存在する頂点が 1 つでもあれば,B の勝利となる.
 B はできるだけ少ない Round 数で勝ちたいと思っていて,A はできるだけ多くの Round をプレイしたいと思っている.両者が最善を尽くすとき,プレイされる Round 数を求めよ.B が有限の Round 数で勝利できることは保証されている.

  • $2 \leq N \leq 50$
続きを読む

TopCoder SRM 670, Division 1, Level 1 : Bracket107

問題概要

 '(' と ')' からなる,括弧がバランスした文字列 $S$ が与えられる.4 つの性質,

  • 長さが $S$ と等しい
  • 括弧がバランスしている
  • $S$ と等しくない
  • $S$ との最長共通部分列 (LCS) の長さが最長

を満たす文字列の総数を求めよ.

  • $4 \leq |S| \leq 50$
続きを読む

TopCoder, Single Round Match 666, Division 1, Level 1 : WalkOverATree

問題概要

 $N$ 頂点の木があって,各頂点は $0$ から $N - 1$ で番号付けられている.木の情報は配列 $\mathit{ parent }$ で与えられ,有効な $i$ について,頂点 $i + 1$ と $\mathit{ parent }_i$ の間に辺があることを表す.
 この木の上で移動することを考える.あるノードからの一回の移動では,そのノードに隣接する頂点に移動することができる.
 頂点 $0$ から始めて,$L$ 回以内の移動で到達できる頂点の数を求めよ(始点も含む)(重複は数えない).

  • $1 \leq N \leq 50$
  • $0 \leq \mathit{ parent }_i \leq i$
  • $1 \leq L \leq 100$
続きを読む

TopCoder, Single Round Match 666, Division 2, Level 2 : GoodString

問題概要

 文字列に対して,以下の操作を考える

  • 文字列のどこか(先頭,末尾も許容)に,文字列 "ab" を挿入する

 空文字列から始めてこの操作を複数回適用することで,文字列 $S$ を作ることができるか?

  • $1 \leq |S| \leq 50$
  • $S_i \in \{ \mathrm{ `a', `b' } \}$
続きを読む