読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

ABC#029 に参加しました

AtCoderABC Python 競技プログラミング

320点 / 216位
諸事情により,22時からの参加,1時間だったけど,とりあえずD問題部分点までは即効で解けた.

f:id:kawasumi_yume:20150921175824p:plain

A問題

問題
A: 複数形 - AtCoder Beginner Contest 029 | AtCoder


回答
Submission #498631 - AtCoder Beginner Contest 029 | AtCoder

入力にsをつけるだけ.入出力の練習かな?(すっとぼけ)

print(input() + "s")

B問題

問題
B: カキ - AtCoder Beginner Contest 029 | AtCoder


回答
Submission #498666 - AtCoder Beginner Contest 029 | AtCoder


文字列内にrが含まれていればカウント,
非常に単純.

res = 0
l = [input() for _ in range(12)]
for s in l:
    res += 1 if "r" in s else 0
print(res)


ちなみにここまではスマホで回答.

C問題

問題
C: Brute-force Attack - AtCoder Beginner Contest 029 | AtCoder


回答
Submission #498794 - AtCoder Beginner Contest 029 | AtCoder


問題のタイトルの通り,総当りで作っていく.
指定される文字数がそんなに多くないのでとりあえずリストの後ろっかわにaやらbやらcやらをくっつけて,出力していく.
私の回答ではとりあえずひたすら作ってくっつけ,最後にソートし,指定された長さと一致するものだけを出力する形とした.
メモリの節約という意味では,作業用の配列があっても良いのかもしれない.追加するときに想定された長さより短かったら弾くとか.
まあ,この例くらいなら必要が無いです.せいぜい3^nくらいだし.

n = int(input())
wl = ["a", "b", "c"]
res = ["a", "b", "c"]
for i in range(n-1):
    for j in range(len(res)):
        for k in range(3):
            res.append(res[j] + wl[k])
 
res.sort()
for r in res:
    if len(r) == n:
        print(r)

D問題 (部分点)

問題
D: 1 - AtCoder Beginner Contest 029 | AtCoder

20点分の回答
Submission #498826 - AtCoder Beginner Contest 029 | AtCoder

とりあえず2分半で部分点のコードを仕上げた自分を褒めたい.
お察しの通り,部分点は総当り.なので,数値を文字列に変換して,"1"をカウントする.

n = int(input())
if n > 1000:
    exit(0)
res = 0
for i in range(1, n+1):
    if "1" in str(i):
        res += str(i).count("1")
print(res)

満点解放の方はわかりません.というか.疲れていて未だに解説にノータッチなんですがそれは.
ツイッターでの話しによれば,桁DPというアルゴリズムを使うみたい.この桁DPは知っていれば解けてしまうため,知識として加えたいところ,知らなくても解けてしまうのが理想ですけど.(というかそうでない回答も若干数存在する? みたいな話をちらほら聞くような気がしますが,とりあえず私は想定解でひたすら解けるようになりたい)


完答できなかったこともそうですが,まず自分のコンディションがあまり良くなかったのも事実なので,競技プログラミングに参加することについてコンディションを整える,という条件も必要になってきそうだ.