既存投稿一覧ページへのリンク
Before
Next
C問題
入力例03
input
1234567890
input_python
def io_func():
n = int(input()) # 標準入力から整数を取得
return n # 取得した整数nを戻り値として返す
output
42413
D問題
入力例01
高橋君は魚屋にウナギを買いに行こうとしています。
高橋君の住む町は縦 10マス、横 10マスからなるグリッド状の区画に分かれています。
各区画は「道」か「壁」のいずれかであり、以下の町並みが与えられています。
- 町並みの各行は文字列で表され、
"."
は道、"#"
は壁を表します。
.......... ← 1行目(上から1番目)
#########. ← 2行目(上から2番目)
#.......#. ← 3行目(上から3番目)
#..####.#. ← 4行目(上から4番目)
##....#.#. ← 5行目(上から5番目)
#####.#.#. ← 6行目(上から6番目)
.##.#.#.#. ← 7行目(上から7番目)
###.#.#.#. ← 8行目(上から8番目)
###.#.#.#. ← 9行目(上から9番目)
#.....#... ←10行目(上から10番目)
各区画は上から$i$行目、左から$j$列目を$(i, j)$と表します($1\leq i \leq 10,\ 1\leq j\leq 10$)。
高橋君は次の2種類の行動を好きな順番で繰り返し行えます。
- 上下左右に隣接する「道」区画への移動。
- 上下左右のいずれかの方向に「前蹴り」を行い、現在地からその方向へ1つ前(隣)と2つ前の区画が「壁」ならば「道」に変えることができる(町外は何も起こらない)。
高橋君の初期位置は区画 (1, 1) です(上から1行目、左から1列目)。
目的地である魚屋は区画 (7, 1) です(上から7行目、左から1列目)。
高橋君が魚屋にたどり着くために必要な前蹴りの回数の最小値を求めてください。
input
10 10
..........
#########.
#.......#.
#..####.#.
##....#.#.
#####.#.#.
.##.#.#.#.
###.#.#.#.
###.#.#.#.
#.....#...
1 1 7 1
input_python
def io_func():
# 高さH、幅Wを標準入力から受け取る
h, w = map(int, input().split())
# ステージ情報(盤面)を受け取り、2次元リストとして格納
stage = [list(input()) for _ in range(h)]
# 始点(A,B)、終点(C,D)の座標を受け取り、0始まりに変換
a, b, c, d = map(int, input().split())
a -= 1
b -= 1
c -= 1
d -= 1
# 各値を戻り値として返す
return h, w, stage, a, b, c, d
output
1
E問題
入力例01
正整数 $N$ に対し、400 number であることは次の2つの条件をともに満たすことであると定義します。
- $N$ の素因数はちょうど2種類である。
- $N$ のそれぞれの素因数 $p$ について、$N$ が $p$ で割り切れる回数が偶数回である(すなわち、$N$ の素因数分解で各素因数の指数が偶数)。
$Q$ 個のクエリが与えられます。各クエリでは、整数 $A$ が与えられるので、$A$ 以下の最大の 400 number の値を求めてください。ただし、常に $A$ 以下の 400 number は必ず存在します。
【具体的な問題】
以下の5つのクエリについて、それぞれの $A$ 以下で最大の 400 number を求めてください。
- クエリ1:$A = 404$ について、404以下で最大の 400 number を求めよ。
- クエリ2:$A = 36$ について、36以下で最大の 400 number を求めよ。
- クエリ3:$A = 60$ について、60以下で最大の 400 number を求めよ。
- クエリ4:$A = 1,000,000,000,000$ について、その値以下で最大の 400 number を求めよ。
- クエリ5:$A = 123,456,789$ について、その値以下で最大の 400 number を求めよ。
input
5
404
36
60
1000000000000
123456789
input_python
def io_func():
q = int(input()) # クエリ数を整数で受け取る
queries = [] # クエリを格納するリストを用意
for _ in range(q):
x = int(input()) # 各クエリ(整数)を受け取る
queries.append(x) # リストに追加
return q, queries # クエリ数q、クエリリストqueriesを返す
output
400
36
36
1000000000000
123454321
F問題
入力例01
半径で6等分に切った円形のケーキがあります。それぞれのケーキのピースには、時計回りに「1, 2, 3, 4, 5, 6」の番号が付いています。
はじめ、全てのピースの色は 色0 です。
あなたは、以下の操作を何度でも行うことができます。
- 1以上6以下の整数 a, b, c を選びます。
- 0以上 b 未満の各整数 i について、ピース番号 $ a + i $(ただしピース番号は1から6までで、もし「a + i」が6を越える場合は、「a + i - 6」と考える)の色を「色c」に変えます。
- この操作1回ごとにかかるコストは「b + X_c」です。色cに変更したときの追加コストは $ X_c $(色cが1なら1、色cが2なら2、・・・)です。
最終的に、すべてのピース番号 $ i $($ 1 \leq i \leq 6 $)に対して、ピース i の色が 色 $ C_i $ となるようにしてください。
この条件を満たすために必要なコストの合計の最小値を求めてください。
まとめ
- ケーキは6等分されている。
- 目標の色リストは「1 4 2 1 2 5」。
- 操作は、任意の範囲を好きな色に一括で塗り替えられるが、操作範囲と色によってコストが変わる:
- 一度に範囲「b」で塗ると、「b + 色番号に対応する$ X_c $ 」のコスト。
- すべてのピースが「C_i」(=入力値「1 4 2 1 2 5」)となるようにする。
input
6
1 4 2 1 2 5
1 2 3 4 5 6
input_python
def io_func():
# 標準入力から、整数Nを取得
n = int(input())
# 標準入力から、スペース区切りの整数をリストcとして取得
c = list(map(int, input().split()))
# 標準入力から、スペース区切りの整数をリストxとして取得
x = list(map(int, input().split()))
# 3つの変数n, c, xをタプルで返す
return n, c, x
output
20