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

水面下の夢

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

ABC 023に参加しました.

AtCoderABC Python 競技プログラミング

最近の土曜日,ずっとAtcoderありますね.楽しい.

A問題

問題

A: 加算王 - AtCoder Beginner Contest 023 | AtCoder

回答

Submission #400438 - AtCoder Beginner Contest 023 | AtCoder


二桁の数字の10の位と1の位を足す問題.
入力されたものを使って,10で割った商(int型)と10で割った余りを足せばいいですね….

n = int(input())
print(n // 10 + n % 10)

しかし,自分は素直に書きすぎた模様.
他の方のコードを見たら,mapメソッドを利用して上手に処理していました.
確かにmapメソッド使えば一行でかけるし,複数の桁にも対応できるんだよなあ….

非常に賢い回答だと思いました,参考にしたいです.

B問題

問題

B: 手芸王 - AtCoder Beginner Contest 023 | AtCoder

回答

Submission #400611 - AtCoder Beginner Contest 023 | AtCoder

んー 素直に指定されている通りにシミュレーションすれば良いと思います.
ただ,入力が"b"の場合だけは別処理したほうが良いかと思います.
私の一回目のWAは多分この,"b"のパターンで落ちていると思う.

n = int(input())
s = input()
accessory = "b"
 
if s == accessory:
    print(0)
    exit(0)
 
for i in range(n):
    if accessory == s:
        print(i - 1)
        exit(0)
    if i % 3 == 1:
        accessory = "a" + accessory + "c"
    elif i % 3 == 2:
        accessory = "c" + accessory + "a"
    elif i > 0:
        accessory = "b" + accessory + "b"
else:
    print(-1)

追記:
他の人のコードを見ているとこの方針のコードと,abcが出現する法則を利用して回答するコードの2つに分類できそうです.
確かに馬鹿みたいに文字列くっつけてたら遅くなりますよね^^;
場合によって使い分けが必要ですね… もっと長い文字列であれば,後者の戦術を取らざるを得ないと思います.実践できるかなあ(不安)

C問題(30点分)

問題

C: 収集王 - AtCoder Beginner Contest 023 | AtCoder

回答

Submission #401126 - AtCoder Beginner Contest 023 | AtCoder

30点分です.
満点はなんとなくわかったようなわからないような.実装は出来ませんでした.
回答見てかなり近い発想ができていたのはいいのですが,実際にソースコードに落とし込めないあたり,弱々プログラマです.

縦と横見て,一回一回計算しなくても済むようにしてから,各マスについて見ていくという方針です.
わかっていたのですが,数が多くなってくるとTLEしますよねw

R, C, K = map(int, input().split())
N = int(input())
candies = [list(map(lambda x: int(x) - 1, input().split())) for _ in range(N)]
 
rows = dict(zip(range(0, R), [0 for _ in range(R)]))
cols = dict(zip(range(0, C), [0 for _ in range(C)]))
for i in range(N):
    rows[candies[i][0]] += 1
    cols[candies[i][1]] += 1
 
res = 0
for i in range(R):
    if rows[i] > K:
        continue
    for j in range(C):
        t = rows[i] + cols[j]
        t -= 1 if [i, j] in candies else 0
        if t == K:
            res += 1
 
print(res)


終わり.
順位のはなししてなかったですけど,一応二桁.86位ですね.

部分点まで早めに稼げたのが大きかったようです.

ただ,ABCのC問題回答は安定させたいですね….うーん^^; 悔しい.