考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC010-B - 花占い を解く

ABC010-B - 花占い

 

これまた問題文が長いので出力例でも見るか

 

(よくわからなかった)

問題文読むか仕方ない…

 

①「好き」「嫌い」「好き」…

②「好き」「嫌い」「大好き」「好き」…

 

上記2パターンのどちらでも「嫌い」にならないように

花びらの数を減らしておく、という問題らしい

 

こういう問題は適当にシミュレーションしてみて

法則性を見つけるに限る

 

花びらが

1枚なら必ず「好き」になる。これはOK

2枚なら「嫌い」になるので1枚減らす必要がある

3枚なら「好き」or「大好き」なのでOK

4枚は ① のパターンで「嫌い」になる。1枚減らして3枚にする…

5枚は ② のパターンで「嫌い」になる。2枚減らして3枚にする…

 

…ん〜 キリがない

1枚と3枚がセーフだったから5枚もイケるのか?と思ったらダメだし…

法則性がよくわからない

 

…ん?

 

> 

 

なんだ

花びらの枚数は1〜9枚なのか

この程度なら if文ゴリゴリでいけるじゃん

 

えーと、5枚までは上に書いた通りで…

 

6枚は ① のパターンで「嫌い」になる。3枚減らして3枚にする…

7枚なら必ず「好き」なのでOK

8枚は必ず「嫌い」になる。1枚減らして7枚にする…

9枚なら「好き」or「大好き」なのでOK

 

以上をコードに落とし込むと…

 

提出したコード

# 入力
n=int(input())
l=list(map(int,input().split()))

# 毟る数をカウントする変数
c=0

# 各花について、毟る数をカウント
for x in l:
  if x==2:
    c+=1
  elif x==4:
    c+=1
  elif x==5:
    c+=2
  elif x==6:
    c+=3
  elif x==8:
    c+=1

# 毟った数を出力
print(c)
 
提出結果はAC
ちょっと面倒臭かったな
 
解説スライドには色々な解法が書いてあった
なるほど、余りに着目するのか…
 
詳細が気になる方は確認してみてください