ABC185参戦記

プログラミング

久々に開催されたABCです!

ARCが連続してあったり、HTTF本戦があったり、私は出ていませんが、ほかにも様々な競技プログラミング関連のイベントがここ数週間で多くあったような感じでしたね。

私はARCで茶色をキープしつつ、HTTFオープンに参加して遊んだり、AtCoderProblemsのBoot camp for BeginnersのEasyを埋めたりしていました。

今回のブログ記事も灰色から茶色に上がれたくらいのプレイヤーが、私が理解できる内容でABC185の解法を記載していきます。
使用言語はPython3です。

A – ABC Preparation

標準入出力と最小値を求めることができるかを問われる問題。

どんなに問題があっても、問題案が一番少ない回数分しか開催できないので、最小値を求めればよいですね。

Pythonでは最小値を求める関数を以下で求めることができます。

min(0,1,2,3)
# ->0

あとは、標準入力の受取と標準出力が出来ればOKです。

# AtCoder Beginner Contest 185
# A - ABC Preparation

A1,A2,A3,A4=map(int,input().split())

print(min(A1,A2,A3,A4))

標準出力と一緒に書いていますが、始めたばかりのころは、一度答え用の変数を用意しておいて、
出力はその変数を出力するほうがわかりやすいかもしれません。

A1,A2,A3,A4=map(int,input().split())

ans=min(A1,A2,A3,A4)
print(ans)

その他、リストに一度格納して、ソート後に配列の先頭を出力する方法もOKです。

ls=list(map(int,input().split()))
ls.sort()

print(ls[0])

B – Smartphone Addiction

for文が書けるかと、丁寧にシミュレーションができるかが問われる問題。

私はこの問題を解くのに結構な時間がかかりました。

管理していく変数は、現在時点のバッテリー残量と、現在の時刻です。

NG判定で、バッテリー残量が0の場合もNGだという点と、充電した時にバッテリー容量以上の充電はできない。という部分に気を付けて書いていけばOKです。

# AtCoder Beginner Contest 185
# B - Smartphone Addiction

N,M,T=map(int,input().split())

now=N   # 現在のバッテリー残量
time=0  # 現在時刻

for i in range (M):
    a,b=map(int,input().split())
    now=now-(a-time)
    if now<=0:
        print("No")
        exit()
    now+=(b-a)
    if now>=N:
        now=N
    time=b
    # print(now,time)

now=now-(T-time)
if now<=0:
    print("No")
    exit()
print("Yes")

C – Duodecim Ferra

私は今回もC問題解けませんでした。

組合わせの問題であることまではわかったのですが、よくわからずに時間を溶かしてしまいました。

いろいろな方の解説を見たのですが、最終的にはこのブログ記事を読んで理解しました。

あとは組合わせの計算が出来ればOKですね。

# AtCoder Beginner Contest 185
# C - Duodecim Ferra

from math import factorial

L=int(input())
s=L-1
a=factorial(s)//factorial(s-11)
b=factorial(11)

print(a//b)

組合わせはPython3.8以降では、標準ライブラリのmatyモジュールの中に準備されているようです。
私はアナコンダを利用しているため、まだ3.7台のPythonですが、3.8以降を使われている方はこちらのコードでもACできます。

import math
print(math.comb(int(input())-1,11))

今回もC問題解けませんでしたが、D問題が解けてレートは少し上がりました。

C問題で粘るより、D問題に早くいったほうがよかったです。

コメント

タイトルとURLをコピーしました