結果
| 問題 |
No.5 数字のブロック
|
| ユーザー |
|
| 提出日時 | 2023-01-03 13:03:14 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 37 ms / 5,000 ms |
| コード長 | 2,785 bytes |
| コンパイル時間 | 164 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 11,648 KB |
| 最終ジャッジ日時 | 2024-11-27 01:51:11 |
| 合計ジャッジ時間 | 2,425 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 34 |
ソースコード
"""
入力
L: 16
N: 3
Wi: 10 5 7
"""
# まず、inputを何度か使うのでiという変数に代入する
# input関数を代入する場合()←かっこをつけると
# そこでinput関数が使われて、input関数自体が
# 代入できないので、関数を代入するために
# かっこをつけずにinputのみを代入する
i = input
# input()関数は1行をinputとして読み込むので
# 入力は3行のため入力を分けて書く
# input関数は文字列で入力されるため
# 整数型に変換するためにintを使ってinputする
L = int(i())
# Nは配列の添え字として使うので最初に
# マイナス1しておく。
N = int(i()) - 1
# Wは各ブロックの幅なのでリストとして表す
# この時、後に繰り返し処理で小さいものから
# イテレーションする(取り出したい)ため
# sorted関数を使い小さい物から順に
# インデックス(要素)を並び替え
# inputの入力は文字列なのでmap関数で
# それらを整数にし、split関数で
# 入力をスペース区切りで分けてリスト
# に入れる
W = sorted(map(int, i().split()))
# 箱の幅(L)よりもブロックの合計(W)が小さくなった時
# に箱に入るブロックの最大値が求められるので
# ブロックの合計を計算する変数(s)を書く
s = sum(W)
# ブロックの幅の合計が箱の幅よりも大きい場合
# プリントせずにスキップして、大きい数から
# 配列を1つ抜いた数にして、これを箱の数のほうが
# 大きくなるまで繰り返してから出力したいため
# whileを使ってL(箱の幅)より(ブロックの合計)が
# 小さくなるまで処理を繰り返す
while s > L:
# ブロックの合計のほうが大きい場合
# ここの処理に進み、その場合大きいブロック
# から削除したいので現在の配列の最大値である(N)
# を全体の数から引いて次にwhileの処理が起こった
# ときに一番大きいブロックが減った後の合計を
# 計算できるようにする
s -= W[N]
# ブロックの数が減った後の計算をしなければ
# ならないため、ブロックの配列の最大値である
# Nも-1しておく
N -= 1
# while文で処理を抜けてきたということは
# 箱の幅よりも、ブロックの合計の数が
# 小さくなったということなので
# ブロックの個数を入力する
# もしブロックの数が多かった場合は
# while文によってブロックの数が減らされているので
# そのままNを入力するが、このNは配列を扱うために
# -1していたため、最後にN + 1をして出力する
print(N + 1)