質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

505閲覧

スコアが最小となるクラス分けを二分探索で行う

apaka

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/23 10:21

学生n人をk組のクラスに分ける。各クラスの人数は偏ってもいいが、最低1人以上とする。クラス分けのスコアを次のように定義する。

スコア=max 1<=i<=k (クラスiにおける最高点-クラスiにおける最低点)

スコアが最小となるクラス分けが望ましい。
クラスkと学生の点数を読み取り、クラス分けの最少スコアを出力せよ。

入力例:
k=3
点数=[10,25,6,0,88,99,36,50]
出力例:
25
この例の場合は、0点,6点,10点,25点の学生を1組、36点,50点を2組、88点,99点を3組とすれば、最少スコア25を得られる。

考え方:スコアがs以下であるクラス分けが存在するクラス数の最小値をf(s)とすると、この問題は、f(s)<=kであるような最小のsを求める問題である。sを二分木探索で求めよ。二分探索を実装するためには、sを引数として受け取り、f(s)の値を返す関数を作成する必要がある。f(s)は次の手順で計算できる。

f(s)の計算アルゴリズム:
1.試験の点数を昇順となるようソートする。
2.t:=1,i:=0とする
3.jをi<=j<=n-1, a[j]<=a[i]+s を満たす最大の整数とする。(点数がa[i],...,a[j]の学生たちを一つのクラスとする)
4.j<n-1ならば、t:=t+1, i:=j+1とし3に戻る。それ以外ならば、tをf(s)の値として出力し終了する。

※sの取りうる値は0以上max 0<=i<=n-1 a[i] 以下の整数である。

上記の問題をpythonで作りたいのですが、成績をソートした後にどのようにすればいいのかわかりません。全体のプログラムを教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問