shomanのブログ

ただの備忘録

競プロ

AtCoder ABC165 C - Many Requirements

以下の条件を満たす数列を全て生成します。 は、長さの正整数列である。 その後、それぞれに対し個ある制約を当てはめスコアを計算し、最大値を求めます。 atcoder.jp 上の条件を満たす数列の生成は深さ優先探索(DFS)でできます。 Goでの実装は以下です。 //…

AtCoder ABC157 D - Friend Suggestions BFSとUnionFind

問題概要 SNSに人の人がいます。 この人の間には、 組の「友達関係」と、 組の「ブロック関係」が存在します(いずれも双方向)。 各人において、友達の友達の…とたどって行き着く人のうち、直接の友達でもブロック関係にもない人(友達候補)の数を求めてくださ…

最小値をO(1)で返すスタックの実装

概要 前の記事でGoによるスタックの実装を紹介しました。 shoman.hatenablog.com そんな中でCracking the Coding Interviewの3.2の問題で以下のようなものがありました。 問題 pushとpopに加えて、最小の要素を返す関数minを持つスタックをどのようにデザイ…

障害物のあるグリッドの最短経路

前置き Cracking the Coding Interviewの8.2に以下のような問題がありました。 世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法作者:Gayle Laakmann McDowell出版社/メーカー: マイナビ出版発売日: 2017/02/27メディア: Kindle版 問…

【回文の順列】ビット列の中で1が一個であるか判別する方法

前置き ある問題を解いているときに、ビット列の中で1が一個であるか判別する方法で、なるほど!と思った解法が載っていたので、忘れないよう書き留めておきます。 結論 if checker&(checker-1) == 0 { // 1が一個だけ } else { // それ以外 } チェックした…

AtCoder【ARC061 C, ABC045 C】たくさんの数式 - Many Formulas

問題 '1'~'9'の数字からなる文字列が与えられるとき、文字の間に任意の数の'+'を入れて表される数式の値の和を求めよ。 制約 C - Many Formulas 前置き 各数字の間に'+'を入れるか入れないかを考えると、全部で通りとなります。 一つの解法として、bit全探索…