Codeforces Beta Round 7

スポンサーリンク

A. Kalevitch and Chess

全部塗られている場合を除き,塗り方は一意で,$8$ 個ある行や列はすべて塗る必要があります.

B. Memory Manager

読解ができれば愚直シミュレーションです.

  • 長さ $N$ の配列を管理してください.
  • alloc:はじめて連続 $n$ 個が $0$ である場所を見つけてください(なかったら NULL を出力).そこに p 番目の alloc である場合 $p$ を書き込んで,$p$ を出力してください.
  • erase:$x$ があればそれをすべて削除してください.なければ ILLEGAL … を出力してください.
  • defragment:$0$ でない要素を左から詰めて再構築してください.

C. Line

互除法により $ax+by=\gcd(a,b)$ の解が見つけられ,その定数倍から $ax+by=c$ の解があれば見つけられます.

D. Palindrome Degree

Manacher などを用いて,各 $[L,R)$ が回文であるかどうかの判定ができるようにしておきます.あとは各 prefix について順に定義通りに(小さい場合の結果を使いながら計算します.

E. Defining Macros

読解ができずにかなりつらかったですが.雰囲気読解に頼った方が簡単な気がします.

guided by arithmetic rules of brackets expansion, we can omit some of the brackets.

あたりが良く分からないですが,たぶん,「同じ優先度の演算をなるべくカッコが少なく書く」というような定義をする気がします?

$(a+b)-(c-d)+(e+f)$ は $a+b-c+d+e+f$ とする,というような感じかなと.

解法ですが,各マクロについて,最後に行っている演算の優先度だけが問題です.特に各マクロは

  • a:変数,定数,またはカッコで挟まれた何か
  • a + b:複数の項に対して最後に $+, -$ のどちらかの優先度の演算を行っている.
  • a * b:複数の項に対して最後に $+, -$ のどちらかの優先度の演算を行っている.
  • unsafe:中で呼ばれるマクロも含めてどこかで unsafe

の $4$ 種のどれであるかだけが重要で,このどれかを判定する再帰関数で構文解析すればよいです.

演算との間にスペースがあったりなかったりしますが,最初に “+” を ” + ” に置換するなどしてあらゆる場所にスペースを挿入したあと,スペースがたくさん並ぶところのスペースを省略する形で実装しま

” # define” みたいな入力が来るのも驚きです.問題文とサンプルからは読解方法がないと思いますが,Input のところをよく読むとちゃんと書いてあります.

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました