International Olympiad in Informatics 2011 |
RICEHUBバージョン: 1.4 |
田園地方に「米の道 (Rice Way)」として知られるまっすぐな道がある. この道に沿って R ヶ所の水田がある. 各水田は 1 以上 L 以下の整数座標に位置する. これら R ヶ所の水田は座標の非減少列で表現される. 形式的に書くと, 0 ≦ i < R なる任意の i に対して, 水田 i は座標 X[i] に位置する. 1 ≦ X[0] ≦ ... ≦ X[R−1] ≦ L と仮定して良い.
複数の水田が同じ座標となる場合があることに注意せよ.
収穫した米をなるべく多く貯蔵するために米集積所を1ヶ所建設する計画がある. 水田と同様に, 米集積所は 1 以上 L 以下の整数座標に位置しなければならない. 水田が1つ, あるいは, 2つ以上存在する座標を含めて, 1 以上 L 以下の整数座標であればどこにでも米集積所を建設できる.
各水田は収穫期ごとにちょうどトラック1台分の米の収穫がある. 集積所に米を輸送するため, 市はトラック運転手を雇わなければならない. トラック1台分の米を集積所に輸送するのに運転手に支払う賃金は1単位距離あたり1バーツである. つまり, トラック1台分の米をある水田から米集積所に輸送するコストはそれらの座標の差に等しい.
残念なことに, 今期の予算は厳しく, 輸送に高々 B バーツしか支払えない. あなたの課題は, なるべく多くの米を集められるように米集積所の位置を決めるのを助けることである.
次のパラメータを持つプロシージャー besthub(R, L, X, B) を実装せよ:
あなたが実装するプロシージャーは集積所の最適な位置を探し, 予算内で集積所に輸送できる米は最大でトラック何台分かを返せ.
米の総輸送費は非常に大きくなることがあることに注意せよ.
予算は 64-bit 整数で与えられる.
解答では 64-bit 整数を使用することを勧める.
C/C++ では long long
型を使用し, Pascal では
Int64
型を使用せよ.
例として, R = 5, L = 20, B = 6,
1 | ||
2 | ||
X | = | 10 |
12 | ||
14 |
の場合を考える.
この場合は, 集積所の最適な位置は複数存在し, 10 以上 14 以下のどの位置に建設してもよい. 上の図はこれらの最適な位置の1つを示しており, 座標 10, 12, 14 の水田から米を輸送することができる. どの最適な位置に対しても, 総輸送費は 6 バーツを超えない. 明らかに, 3ヶ所より多くの水田から米を集められる集積所の位置は存在しない. よって, この解は最適であり, besthub は 3 を返さなければならない.
小課題 1 (17 点)
|
小課題 3 (26 点)
|
小課題 2 (25 点)
|
小課題 4 (32 点)
|
ricehub/
ricehub.c
または ricehub.cpp
または ricehub.pas
ricehub.h
または ricehub.pas
grader.c
または grader.cpp
または grader.pas
grader.in.1
, grader.in.2
, ...grader.expect.1
, grader.expect.2
, ...