LoginSignup
1
0

AtCoder初心者振り返りメモ ABC344

Last updated at Posted at 2024-03-09

ABC344の回

A-問題

[問題文]
英小文字と | のみからなる文字列 S が与えられます。
S は | をちょうど 2 個含むことが保証されます。

2 つの | の間にある文字および | を S から削除した文字列を出力してください。

[考察や感想]
解答用に用意した変数「 T 」に転記するタイミング、転記しないタイミングを変数「 flg 」を使って制御しました。

A.py
# 2024/3/9 本番解答

S = input()

# 解答用の変数と制御用の変数を用意する
T = ""
flg = 0

# flg の値で「転記する」「しない」を制御した
for c in S:
    if c != "|" and flg == 0:
        T += c

    if c != "|" and flg == 2:
        T += c

    if c == "|":
        flg += 1
print(T)

追記:解説を見たら、"|" で区切って、間を除去する方法が書いてありました。
それが一番スマートですね~。。。

A解説.py
# 2024/3/9 解説の模範解答
L = list(map(str, input().split("|")))

print(L[0]+L[2])

B-問題

344b.png

[考察や感想]
Nの入力が与えられないというレアケースで、リスト格納に手間取りましたが、順に入力してくる値の最後が「 0 」とわかっているので、ループから出る記述を追加した。入力とは、逆の順に出力して正答となりました。

B.py
# 格納用の配列を用意
A = []

for _ in range(101):
    a = int(input())
    A.append(a)
    if a == 0:
        break

L = len(A)

# 配列A を末尾から順番に出力する
for i in range(L-1,-1,-1):
    print(A[i])

C-問題

344c.png

[考察や感想]
まず最初に問題通りの動作を実装しましたが、TLEで通りませんでした。そこは、想定通りでいかに高速化するかを考えました。

全パターンでは、多すぎると考えられるので
・配列X の最大値を取得して、それ以上の値を除去
・set() に格納して、一意に集約

なんとか、TLEを回避できました。

C.py
# 問題通りに順番に変数に格納
N = int(input()) 
a = list(map(int, input().split()))
M = int(input()) 
b = list(map(int, input().split()))
L = int(input()) 
c = list(map(int, input().split()))
Q = int(input()) 
X = list(map(int, input().split()))

# 配列X の最大値を取得
MX = max(X)

# a,b,c それぞれをソートし、X の最大値を超える値を除去
a.sort()
b.sort()
c.sort()

A = []
for i in a:
    if i <= MX:
        A.append(i)
    else:
        break
B = []
for i in b:
    if i <= MX:
        B.append(i)
    else:
        break
C = []
for i in c:
    if i <= MX:
        C.append(i)
    else:
        break

# すべての組み合わせを一意に集約
ST = set()
for x in A:
    for y in B:
        for z in C:
            d = 0
            d = x+y+z
            if d <= MX:
                ST.add(d)
                
# STの中から、X の値の有無をひとつずつ検証
for x in X:
    if x in ST:
        print("Yes")
    else:
        print("No")
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