1
0

More than 3 years have passed since last update.

Atcoder ABC160 A-EをPythonで

Last updated at Posted at 2020-04-14

A Coffee

2文字目=3文字目かつ4文字目=5文字目ならYes、それ以外はNo

ABC160a.py
s=input()

if s[2]==s[3]:
    if s[4]==s[5]:
        print("Yes")
        exit()
print("No")

B Golden Coins

貨幣価値の高いものから順に入れていけばOK。AOJの問題みたいにうまくいかないパターンかなと思ったら違った。

ABC160b.py
n=int(input())

a=n//500
b=(n%500)//5

print(1000*a+5*b)

C Traveling Salesman

終点と始点区間を含む$n$区間のうち、最も距離の長い区間を除いた和を出力する

ABC160c.py
k,n=map(int,input().split())
a=list(map(int,input().split()))
b=[]
for i in range(1,n):
    b.append(a[i]-a[i-1])
b.append(k-a[n-1]+a[0])

b=sorted(b)
print(sum(b[:n-1]))

D Line++

2点$(i,j)$を結ぶパスは以下の2通り。最も少ないものを数え上げていく。$x-y$間の1を足すことを忘れずに。
・$i$と$j$を直結する($j-i$)
・$i=>x=>y=>j$と回る

ABC160d.py
n, x, y = map(int, input().split())

ans = [0] * n
for i in range(n-1):
  for j in range(i+1, n):
    d = min(j-i, abs(i-x+1)+abs(j-y+1)+1)
    ans[d] += 1

ans=ans[1:]#区間長0の場合を除く

for a in ans:
    print(a)

解説ではDFS使うって言ってたけどまだ理解できてない。。

E Red and Green Apples

赤リンゴと緑リンゴをそれぞれ$X$個、$Y$個ずつ降順にソートして混ぜてまた降順にソートしたものと、ソートした無色リンゴの2つのリストを用意する。
その後無色リンゴがある限り赤+緑リンゴリストの最大値と無色リンゴリストの最大値を比較して大きいものを一つずつansに足していき、リストから消していく。これを$X+Y$回繰り返す。

ABC160e.py
x,y,a,b,c=map(int,input().split())

p=list(map(int,input().split()))
q=list(map(int,input().split()))
r=list(map(int,input().split()))
p=sorted(p,reverse=True)[:x]
q=sorted(q,reverse=True)[:y]
r=sorted(r)

p.extend(q)
p=sorted(p)

ans=0
for i in range(x+y):
    if len(r)>0:
        if p[-1]<r[-1]:
            ans+=r[-1]
            r.pop(-1)
        else:
            ans+=p[-1]
            p.pop(-1)
    else:
        ans+=p[-1]
        p.pop(-1)

print(ans)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0