前回に続いて2回目のコンテスト。 ABC問題くらいはいけるだろうと参戦したらCでダメでした。 情けない。。。
言語はPython3.4です。
コンテスト
全国統一プログラミング王決定戦の予選です。
2019-01-27(日) 21:00 ~ 2019-01-27(日) 23:00
AtCoder 全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019
成績
順位は2216位。 始まって1時間後から参加したのでしょうがないね。
提出したコードとどう考えたか
解説を見るか同じ言語の回答を見れば良いものですが、備忘録のため提出したコードをどう考えて書いたかのメモしておく。 コメントはあとでつけました。
A - Subscribers
アンケート結果から購読者の重複数の最大と最小を考える問題。 最大はAかBの小さい方。 最小はか0の大きい方です。
N, A, B = list(map(int, input().split()))
Max = A if A < B else B
Min = (A + B) - N
Min = max(Min, 0)
print(Max, Min)
なぜ、3項演算子のような書き方をしたのか。
min()
でよかった。
解説をみて
Pythonの回答があった。
N, A, B = map(int, input().split())
print(min(A, B), max(0, A + B - N))
すごくスマートです。
B - Touitsu
3つの文字列を一文字ずつ入れ替えて同じになるまでの操作回数を求める問題。
N = int(input().strip())
A = input().strip()
B = input().strip()
C = input().strip()
count = 0
for a, b, c in zip(A, B, C):
if a is b:
if a is c:
continue
else:
count += 1
else:
if b is c:
count += 1
elif a is c:
count += 1
else:
count += 2
print(count)
zip()
を使って文字列をいっぺんに扱えたことはよかったが、判定式がグダグダ。
解説をみて
set()
で重複しない文字の数を求めればよかったのか。
リファクタリング
N = int(input().strip())
A, B, C = input(), input(), input()
count = 0
for arr in zip(A, B, C):
count += len(set(arr)) - 1
print(count)
C - Different Strokes
自分の幸福度と相手の幸福度の差が一番大きくなるように交互に選ぶいじわるな問題。 一緒に幸福度を高める道はなかったのか。。。
N = int(input().strip())
arr = []
for n in range(N):
A, B = list(map(int, input().split()))
arr.append([ A - B , A, B]) # ここを間違えた。
# 1つめの要素をキーにして降順ソート
arr = sorted(arr, reverse=True)
# それぞれの幸福度
ta = sum([a[1] for a in arr[::2]])
ao = sum([a[2] for a in arr[1::2]])
print(ta - ao)
AとBの差が大きなものから選んでいけば良いかと考えていた。 2次元配列のソートはとても便利だ。 例題と半分のケースは通ってしまうので固執してしまった。
ここで時間終了。
解説をみて
AとBの差ではなく和の降順だったようだ。 色々と試せばよかった。
おわりに
散々な結果になってしまった。 地道に解ける問題を増やすしかない。
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17