🔥
【AtCoder】ABC403をPythonで解く
1. はじめに
目的
ABCを解くことにより、とにかくRatingを上げていく。
注意点
言語はPython(PyPy 3.10-v7.3.12) を使用しています。
コンテスト情報
コンテスト名
AtCoder Beginner Contest 403
コンテストURL
開催日
2025-04-27(日) 21:00 ~ 2025-04-27(日) 22:40 (100分)
配点
問題 | 点数 |
---|---|
A | 100 |
B | 250 |
C | 300 |
D | 425 |
E | 500 |
F | 500 |
G | 600 |
結果
順位:5287/7784
総合 | A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|---|
得点 | 650(1) | 100 | 250 | 300(1) | ||||
時間 | 81:14 | 5:08 | 26:48 | 76:14 |
2. 問題と解法
Odd Position Sum
A:コード
n = int(input())
a = map(int, input().split())
count = 0
for i, j in enumerate(a):
if (i+1) % 2 == 1:
count += j
print(count)
解法
- 条件分岐で奇数かどうかを判断する。
- 奇数であれば、
変数に加えていく。count
改善点
特になし
Four Hidden
B:コード
t = str(input())
u = str(input())
flag = 0
for i in range(len(t)-(len(u)-1)):
for j in range(len(u)):
if t[i+j] != u[j] and "?" != t[i+j]:
break
else:
flag = 1
if flag == 0:
print("No")
else:
print("Yes")
解法
- 最大で、
回の線形探索を行うことになる。len(t)-(len(u)-1) -
回ずつの探索で、1 とT が一致するかを一番前の文字から確かめていく。U -
のT 番目がi+j であれば無条件で? OK -
のT 番目がi+j と同じ文字ならばU OK
-
- 全ての文字が条件を満たせば
、満たすまで続けていく。Yes
改善点
特になし。
403 Forbidden
C:コード
n, m, q = map(int, input().split())
admitted = [set() for _ in range(n)]
for i in range(q):
query = list(map(int, input().split()))
if query[0] == 1:
if "all" not in admitted[query[1]-1]:
admitted[query[1]-1].add(query[2])
elif query[0] == 2:
admitted[query[1]-1].add("all")
elif query[0] == 3:
if "all" in admitted[query[1]-1] or query[2] in admitted[query[1]-1]:
print("Yes")
else:
print("No")
解法
- 誰がどのページへの閲覧権限を持つのかを、
のset\ in\ list に格納していく。admitted - クエリの種類が
か1 か2 かで処理を分ける。3 -
番目の人に、query[1] 番目のページの閲覧権限を与えて、query[2] にadmitted[query[1]-1] を格納する。query[2] -
番目の人に、全てのページの閲覧権限を与えて、query[1] にadmitted[query[1]-1] を格納する。"all" -
番目の人がquery[1] の閲覧権限を持てば、query[2] を出力する。Yes
-
- 集合
を使うことで、クエリset 番の閲覧権限の探索にかかる時間を減らしている。3
Discussion