0
0

More than 1 year has passed since last update.

超初心者がAtcoder ProblemsのB問題を86から96まで解いてみる件【10割自分用】

Posted at

解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!

B - 1 21

practice.py
a,b = input().split()
num = a+b
if (int(num)**0.5).is_integer():
    print("Yes")
else:
    print("No")

数字を0.5乗してルートを乗っけるのと同じことをして、もし平方数だったら、integer型になるのでis_integer()で判定する

B - Coins

practice.py
a = int(input())
b = int(input())
c = int(input())
x = int(input())
cnt = 0
for i in range(a+1):
    for j in range(b+1):
        for k in range(c+1):
            if 500*i + 100*j + 50*k == x:
                cnt += 1
print(cnt)

脳死全探索で解決、a,b,cの数も含めないと行けないのでrangeの数に1を足しています。

B - Card Game for Two

practice.py
n = int(input())
cards = sorted(list(map(int, input().split())), reverse=True)
a = 0
b = 0
turn = 0
for card in cards:
    if turn % 2 == 0:
        a += card
    else:
        b += card
    turn += 1
print(a-b)

アリ姐からボブの順で強いカードをとってくので、受け取ったカードの数字をリストにしてsortで大きい順に並べ替える。そしてturn変数を作って順番の判定をする

B - Hina Arare

practice.py
n = int(input())
colours = set(input().split())
if len(colours) == 3:
    print("Three")
else:
    print("Four")

set型にすれば勝手に重複を消してくれるのよ、そしてlenで要素の数を求めてそのまま出力するだけ

B - Palindromic Numbers

practice.py
a,b = map(int, input().split())
cnt = 0
for i in range(a,b+1):
    i = str(i)
    if i[0] == i[4]:
        if i[1] == i[3]:
            cnt += 1
print(cnt)

aもbも5桁と約束されてるので一度str型にして1桁目と5桁目が一緒に数字か等を判定していく

B - Two Colors Card Game

practice.py
n = int(input())
blue = [input() for _ in range(n)]
m = int(input())
red = [input() for _ in range(m)]
ans = 0
for i in range(n):
    gain = blue.count(blue[i])
    lose = red.count(blue[i])
    ans = max(ans, gain-lose)
print(ans)

ansをあらかじめ0にしておくことで絶対に負の数になることがない。gainで青いカードにある特定の文字列の数を調べる、そしてloseで赤いカードにある特定の文字列の数を調べる。最後に現在の最大値と比べる

B - Chocolate

practice.py
n = int(input())
d,x = map(int, input().split())
spans = [int(input()) for _ in range(n)]
total = x
for i in range(n):
    total += ((d-1) // spans[i]) + 1
print(total)

1日目は全員チョコを食べられるので、日数から1日目を抜くということでd-1にしてその後にそれぞれの人のチョコレートを食べられる日にちの間隔で割る。最後に1日目に食べられるチョコレートの数を加える

B - Small and Large Integers

practice.py
a,b,k = map(int, input().split())
if (b-a+1) < (2*k):
    numbers = [num for num in range(a,b+1)]
else:
    numbers1 = [num for num in range(a,a+k)]
    numbers2 = [num for num in range(b-k+1,b+1)]
    numbers = numbers1 + numbers2

for number in numbers:
    print(number)

最初に重複する番号がないかを判定する(例えば、入力値が4 8 3の場合は456と678で6が重複してしまう)、もし重複がある場合は範囲内のすべての数を出力するだけ。もし無い場合は最初にaからa+k番目までに大きい数を求めて、次にb-k+1からb+1までに大きい数を求めて、最後に合体する

B - Toll Gates

practice.py
n,m,x = map(int, input().split())
charge = list(map(int, input().split()))
a = len([i for i in charge if i <= x])
b = len([i for i in charge if i >= x])
print(min(a,b))

一度、初期位置より前にある料金所の数と初期位置より後にある料金所の数を調べ上げて、minメソッドを使って少ない方をとって出力する

B - Bitter Alchemy

practice.py
n,x = map(int, input().split())
ing = [int(input()) for _ in range(n)]
total = n
x -= sum(ing)
total += (x//min(ing))
print(total)

すべての種類のドーナツを絶対一個は作らないといけないので、totalの初期値をドーナツの種類と同じ数にして、xから全てのドーナツを一個ずつ作るのに必要な材料を引く。そして材料が一番少ないドーナツを作りまくる!

B - Maximum Sum

practice.py
numbers = list(map(int, input().split()))
k = int(input())
d = max(numbers)
numbers.remove(max(numbers))
for i in range(k):
    d *= 2
numbers.append(d)
print(sum(numbers))

一番をでかい数を操作できる回数2倍し続ければいいだけです、コードが不細工すぎる...

0
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
0
0