セイレンチュウ..

AtCoder ABC131

概要

AtCoderの記録です。全部Pythonで頑張ります。
E,Fは解いてないです。

この記事の対象

  • AtCoderについてある程度知っている人
  • Pythonがある程度読める人



本編

AtCoderとは

競技プログラミングコンテストを開催している会社です。 atcoder.jp

ABC131

友達の家でボドゲをしている合間に参戦です。

A Security

f:id:alumi-tan:20190623003823p:plain 4桁しかないのであり得るパターンを全部考えて条件分岐しました。

s = input()
if s[0] == s[1] or s[1] == s[2] or s[2] == s[3]:
    print('Bad')
else:
    print('Good')

B Bite Eating

f:id:alumi-tan:20190623003903p:plain あれこれ方法を考えて時間を無駄にしましたが、結局味の絶対値が1番小さいものを食べたときがスコアへの影響が最小です。

N,L = map(int,input().split())
val = []
for i in range(N):
    val.append(L+i)

s = sum(val)
small = 10000
for i in val:
    if abs(i) < small:
        small = abs(i)
        memo = i

if memo < 0:
    print(s+small)
else:
    print(s-small)

C Anti-Division

f:id:alumi-tan:20190623005726p:plain 中学生くらいの数学の問題。実装はfractions.gcd()を使ったら簡単です。

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

def ans(v1,v2,v3):
    return v1-v1//v2-v1//v3+v1//(v2*v3//fractions.gcd(v2,v3))
print(int(ans(B,C,D)-ans(A-1,C,D)))

D Megalomania

f:id:alumi-tan:20190623010003p:plain 期限時刻の早い順にこなしていくのが最善です。

import numpy as np
N = int(input())

memo = np.zeros([N,2])
for i in range(N):
    A,B = map(int,input().split())
    memo[i][0] = A
    memo[i][1] = B

memo = memo[np.argsort(memo[:,1])]
#print(memo)
flag = True
s = 0
for i in range(N):
    s += memo[i,0]
    if memo[i,1]-s<0:
        flag = False
        break

if flag:
    print('Yes')
else:
    print('No')

まとめ

今回はCで1回WAを出した以外はストレートで通せました。Dが一発で通せたのは初めてな気がするので嬉しいです。 また次回。 f:id:alumi-tan:20190623010215p:plain