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