AtCoderBeginnerContest092 D: Grid Components をScalaで解いてみた
最近会社で競技プログラミング部を始めました笑
まあその辺の経緯はそのうち書くとして、上記問題を解いてみた。
初見よくわからなかったけど、最初から100 * 100のマスを定義(上半分を白、下半分を黒)として、あとはそれぞれ指定された個数分穴を開けるように作れば良い。
object GridComponents extends App { val sc = new java.util.Scanner(System.in) val A = sc.nextInt val B = sc.nextInt var a = A - 1 var b = B - 1 // どんなA, Bがきても、100 x 100 のマスを考える println("100 100") printLines(".", "#", b) printLines("#", ".", a) // 半分の100 x 50はmanStr // そこにcntの数だけ、subStrを埋める。ここで、偶数行の偶数列目だけに埋めてcntをデクリメントする // 偶数行の奇数列目だけを埋めることで、自陣をかならず1つのmainStrの連結成分とする def printLines(mainStr :String, subStr :String, c :Int) :Unit = { var cnt = c for(h <- 1 to 50) { if (h % 2 == 1 | cnt == 0) { println(mainStr * 100) } else { for(w <- 1 to 100) { if (w % 2 == 0 && cnt > 0) { print(subStr) cnt -= 1 } else { print(mainStr) } } println() } } } }
例えば100 100という入力がされた場合はこんな感じになる(画面に入りきらなかったので60行くらい削除したけど雰囲気は掴めるはず)
そのほか同じくABC092のTravelingBudget, Chocolate, TravelingPlanも完答したものをgithubにあげて居るので興味があればどうぞ
github.com