名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

ABC 023に参加しました.

最近の土曜日,ずっと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問題回答は安定させたいですね….うーん^^; 悔しい.