こんにちは, Shinoryoです.
今回はトヨタ自動車プログラミングコンテスト2023#3(AtCoder Beginner Contest 306)を, Pythonで解いてみた結果を書き連ねていこうと思います.
Toyota Programming Contest 2023#3(AtCoder Beginner Contest 306) - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - Echo
愚直に実装すれば問題ありません.
N = int(input()) | |
S = list(input()) | |
print("".join([S[i // 2] for i in range(2*N)])) |
B - Base 2
A = list(map(int, input().split())) | |
print(sum(A[i] * (2**i) for i in range(len(A)))) |
C - Centers
実装方針は以下のようになります.
の要素を順に調べていく.- 整数
が出現した回数 を, 配列を利用して記録する. - ある整数
に対して となったら, 出力順を記録する配列 に を追加する.
- 整数
# 入力 | |
N = int(input()) | |
A = list(map(int, input().split())) | |
# Aの要素を順に調べていく | |
# 今までの発生回数を記録 | |
appearance_count = [0 for _ in range(N + 1)] | |
# 1~Nを出力する順にappendする用の配列 | |
ans = [] | |
for i in range(3 * N): | |
appearance_count[A[i]] += 1 | |
# 発生回数が2回になったとき、ansにその整数をappendする | |
if appearance_count[A[i]] == 2: | |
ans.append(str(A[i])) | |
# 出力 | |
print(" ".join(ans)) |
D - Poisonous Full-Course
ここでは, 動的計画法(dynamic programming)を用いることを考えます. 以下の2次元配列を用意して, 入れるべき値を計算していきます.
:料理 までの料理を食べるか下げてもらうか選択したとき, 高橋くんが状態 である場合の, 食べた料理の美味しさの総和の最大値- 状態
:高橋くんがお腹を壊していない状態 - 状態
:高橋くんがお腹を壊している状態
初期状態のため,
- 高橋くんがお腹を壊していない状態で, その料理を食べなかった(
). - 高橋くんがお腹を壊していない状態で, その料理を食べた(
). - 高橋くんがお腹を壊している状態で, その料理を食べた(
).
次に運ばれてくる料理が解毒剤入り(
- 高橋くんがお腹を壊している状態で, その料理を食べなかった(
).
次に運ばれてくる料理が毒入り(
- 高橋くんがお腹を壊していない状態で, その料理を食べなかった(
).
次に運ばれてくる料理が毒入り(
- 高橋くんがお腹を壊していない状態で, その料理を食べた(
). - 高橋くんがお腹を壊している状態で, その料理を食べなかった(
).
以上のことを考慮して配列
# 入力 | |
N = int(input()) | |
# 配列dpの初期状態 | |
dp = [[0, 0] for _ in range(N + 1)] | |
# 配列dpを順番に計算 | |
for i in range(1, N + 1): | |
X, Y = map(int, input().split()) | |
if X == 0: | |
dp[i][0] = max(dp[i - 1][0], dp[i - 1][0] + Y, dp[i - 1][1] + Y) | |
dp[i][1] = dp[i - 1][1] | |
else: | |
dp[i][0] = dp[i - 1][0] | |
dp[i][1] = max(dp[i - 1][0] + Y, dp[i - 1][1]) | |
# 出力 | |
print(max(dp[N])) |
動的計画法は, 他のページでも解説しています.
AtCoder Beginner Contest 189をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は AtCoder Beginner Contest 189 を, Pythonで解いてみた結果を書 き連ねていこうと思います. AtCoder Beginner Contest 189 - AtCoder AtCoder is...
AtCoder Beginner Contest 210をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は AtCoder Beginner Contest 210 を, Pythonで解いてみた結果を書 き連ねていこうと思います. AtCoder Beginner Contest 210 - AtCoder AtCoder is...
AtCoder Beginner Contest 178をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は AtCoder Beginner Contest 178 を, Pythonで解いてみた結果を書 き連ねていこうと思います. AtCoder Beginner Contest 178 - AtCoder AtCoder is...
AtCoder Beginner Contest 179をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は AtCoder Beginner Contest 179 を, Pythonで解いてみた結果を書 き連ねていこうと思います. AtCoder Beginner Contest 179 - AtCoder AtCoder is...
サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219)をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219) を, Pythonで解いてみた結果を書き連ねていこうと思います. Sciseed Programming Contes...
日鉄ソリューションズプログラミングコンテスト2023(AtCoder Beginner Contest 303)をPythonで解く-Shinoryo's Weblog
こんにちは, Shinoryoです. 今回は 日鉄ソリューションズプログラミングコンテスト2023(AtCoder Beginner Contest 303) を, Pythonで解いてみた結果を書き連ねていこうと思います. NS Solutions Corporat...
E以降
E以降は私の能力不足故に省略いたします.
参考にしたサイト等
- 「解説 - トヨタ自動車プログラミングコンテスト2023#3(AtCoder Beginner Contest 306)」
Editorial - Toyota Programming Contest 2023#3(AtCoder Beginner Contest 306)
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)