0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ABC426] ABC 426(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)

Posted at

[ABC426] ABC 426(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)

合計回答時間:60分

A問題

自分の回答

かかった時間:5分

X,Y = input().split()

# indexがどちらが先か調べる
os = ["Ocelot", "Serval", "Lynx"]

x_index = 0
y_index = 0
for i in range(3):
    if X == os[i]:
        x_index = i
    if Y == os[i]:
        y_index = i

if x_index >= y_index:
    print('Yes')
else:
    print('No')

終了後考えた最適な回答

x, y = input().split()
ver = {"Ocelot":0,"Serval":1,"Lynx":2}

for i in ver:
    if x == i:
        x = ver[i]
    if y == i:
        y = ver[i]
print("Yes" if x >= y else "No")

B問題

自分の回答

かかった時間:10分

# Sは長さ3以上、英小文字
S = list(input())

dic = {}

for i in range(len(S)):
    if S[i] not in dic:
        dic[S[i]] = 1
    else:
        dic[S[i]] += 1

for k,v in dic.items():
    if v == 1:
        print(k)

終了後考えた最適な回答

S = input()

S_s = sorted(S)
print(S_s[-1] if S_s[0] == S_s[1] else S_s[0])

C問題

自分の回答

かかった時間:45分

# OSのバージョンはN個ある
# PCもN台、2番目のPCのOSバージョンは2
# おそらく普通に実装するとTLEになる
# まずはTLEになってもいいから実装をする

# 普通の実装完了した
# O(Q)×O(N) = 10^11でTLE
# ①バージョンが2以下のPCを探す
# ②バージョンが2以下ならカウントに追加
# ③2以下のPCを6にアップグレード
# minという変数を作り、そこに3を入れる

N,Q = map(int,input().split())

# PCのバージョンの初期状態
PC = {}
for i in range(N):
    PC[i+1] = 1

min = 1
for i in range(Q):
    X,Y = map(int,input().split())
    # 2 6の場合、バージョン2以下のPCをバージョン6にする

    # PCのキーがminからXの値の合計を出力する
    # 累積和で実装すればいけるのだろうか?
    sum = 0
    for i in range(min,X+1):
        sum += PC[i]
        PC[i] = 0

    # sum = sum(map(PC.get, range(min,X+1)))
    
    print(sum)
    min = X
    PC[Y] += sum

終了後考えた最適な回答

# OSのバージョンはN個ある
# PCもN台、2番目のPCのOSバージョンは2
# おそらく普通に実装するとTLEになる
# まずはTLEになってもいいから実装をする

# 普通の実装完了した
# O(Q)×O(N) = 10^11でTLE
# ①バージョンが2以下のPCを探す
# ②バージョンが2以下ならカウントに追加
# ③2以下のPCを6にアップグレード
# minという変数を作り、そこに3を入れる

N,Q = map(int,input().split())

# PCのバージョンの初期状態
# PC = {}
# for i in range(N):
#     PC[i+1] = 1

PC = [1 for i in range(N)]

min = 0
for i in range(Q):
    X,Y = map(int,input().split())
    # 2 6の場合、バージョン2以下のPCをバージョン6にする

    # PCのキーがminからXの値の合計を出力する
    # 累積和で実装すればいけるのだろうか?
    sum = 0
    for j in range(min,X):
        sum += PC[j]
        PC[j] = 0
    if sum > 0:
        min = X

    # sum = sum(map(PC.get, range(min,X+1)))
    print(sum)
    PC[Y-1] += sum

次に向けてやること

・二重for文を改善する問題を解く

感想

C問題もうちょっとで解けた、考え方自体はあっていた。for文の二重ループを改善する問題は多数出るので確実に解けるようにしたい

補足

関係するリンク(参考文献など)

今回のコンテスト

回答の正当性は保証できません。ベストエフォート方式です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?