AtCoder Beginner Contest 131 に挑戦【Python】

A - Security

入力例

3776

提出したコード

S = input()

a = int(S[0]) - int(S[1])
b = int(S[1]) - int(S[2])
c = int(S[2]) - int(S[3])

if a != 0 and b != 0 and c != 0:
   print("Good")
else:
   print("Bad")

ひとこと

かんたん

B - Bite Eating

入力例

5 2

提出したコード

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

n = list(range(L, L+N))

if min(n) >= 0:
   n.remove(min(n))
elif min(n) < 0 < max(n):
   n.remove(0)
else:
   n.remove(max(n))

print(sum(n))

ひとこと

数列の最大値が0以下の場合を考え忘れていてはじかれました。

C - Anti-Division

入力例

4 9 2 3

提出したコード(WA)

import fractions

A, B, C, D = list(map(int, input().split()))

gcd = fractions.gcd(C, D)
lcm = C * D / gcd

ac = A/C
bc = B/C
ad = A/D
bd = B/D
acd = A/lcm
bcd = B/lcm

if A%C != 0:
   ac = int(ac) + 1
if B%C != 0:
   bc = int(bc)
if A%D != 0:
   ad = int(ad) + 1
if B%D != 0:
   bd = int(bd)
if A%lcm != 0:
   acd = int(acd) + 1
if B%lcm != 0:
   bcd = int(bcd)
   
c_n = bc - ac + 1
d_n = bd - ad + 1
cd_n = bcd - acd + 1
ans = B - A + 1 - c_n - d_n + cd_n

print(int(ans))

ひとこと

こちらの問題、なんとAC出来ていません。難しい。

最初、割り切れたらカウントアップしていって数えようとか思ってたんですけど入力例に

314159265358979323 846264338327950288 419716939 937510582

みたいなのを見つけて断念。調べてみたら集合とかの問題のようでした。

サイトを参考にどうにか実装してみたのですが、2ケース程WAが出てしまいました。何が違うのか全然分からんなー

気が向いた時にでもAC出来るように再挑戦したいと思います。

感想

C問題で数学力の大切さを思い知りました。競プロってこーゆーことかー、みたいな。これまでは解き方というより、解法を適切に実装できるかどうかという戦いでしたが、そろそろ次の段階に移った気がします。数学がとても苦手なので暇なときに少しづつ勉強してみます。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

コメントを投稿するには、 ログイン または 会員登録 をする必要があります。