塩見周子の徒然日記

自分のことを塩見周子と思い込んでいるオタクです

2/11 AtCoder(入力の受け取り方、int、floatの扱いについて)/ss

AtCoder

解くに至ったもの(15問)
ABC:040B,C
ARC:008A/009A/010A/011A/012A/014A/015A/016A/017A/018A/058A/073A
DPまとめコン:A

 

ARC009A

int型は切り捨て

 

ARC010A

昨日の続き的な

改行入力

①L = [input() for _ in range(回数)]

②L = []
for j in range(M):
  L.append([int(i) for i in input().split()])
print(L)

のどちらか好きな方を まあ①の方が楽 それはそう

 

☆②はsplit()をつけないと、例えば

10

20

30

という入力を受け取ったとき、[[1,0],[2,0],[3,0]]と入ってしまうので注意

 

スペース入力

10 20 30 を[10,20,30]と受け取ってほしくて、

L = input().split()とやると['10','20','30']と受け取られる。要素はあくまで文字列。

数値を要素にしたいときは、list(map(適用したい関数,リスト名))としてやればよい。

例えば、

L = list(map(int,input().split()))

などとすればL=[10,20,30]となる。(ここではリスト名の所にinput().split()を入れた。これが楽。)floatでもよい。

 

ARC012A

日曜か土曜で判定してほしくて

if D == 'Sunday' or  'Saturday'ってやったらダメだった

D == 'Sunday' or D == 'Saturday'としないとダメな模様

 

ARC018A

小数点はint()じゃなくてfloat()だった 完全に忘れてた

 

ARC058A

バチコリ時間かかった 5WA食らう インデントには気を付ける

 

ABC040B

思いつかなくて答えを見た 与えられた数nに対して、その中で作れる長方形の縦横の長さの絶対値abs(w-h)と、あまったタイルn-w*hの合計をできるだけ少なくする問題

全探索もどきが一番いいらしい 幅wを1~sqrt(n)、高さをw~n//wの範囲で取ってforで回す 計算量はn/1+n/2+......=nlognらしく、n <= 10^5なら間に合うとのこと すごいね

 

解けなかったもの

ABC:027B

ARC:013A

 

ABC027B

解決しました 原因は1==1.0が成り立つかどうかの理解が甘かったこと

atcoder.jp

12行目

if people//(c+1) != K

という記述、最初はif int(people//(c+1)) != Kと書いていたのですが、いずれにせよ切り捨てを行ったことで、例えば3 0 0と人数が与えられたときに2つ目の島を数えた時点で3//2==1→橋の本数が1本とカウントされてしまう というバグが発生していた模様

ここをダブルスラッシュではなくスラッシュに変えるとうまくいきました 結局1==1.0は成り立つというのが今回の結論 taiyoslimeありがとう