電池の寿命(欲張り)
3095 ワード
電池の寿命、総時間制限:1000 msメモリ制限:65536 kB説明小Sは新しくハンドヘルドゲーム機を買った.このゲーム機は2本の5番電池から電力を供給している.長時間ゲームができることを保証するために、彼は5番の電池をたくさん買った.これらの電池のメーカーによって、品質にも違いがあるので、使用寿命も異なり、5時間しか使えないものもあれば、3時間しか使えないものもある.明らかにもし彼が2つの電池しかなくて1つは5時間で1つは3時間使うことができて、それでは彼は3時間のゲームしかできなくて、1つの電池の残りの電力量は使うことができなくて、しかしもし彼がもっと多くの電池があれば、もっと十分にそれらを利用することができて、例えば彼は3つのプールがそれぞれ3、3、5時間使うことができて、彼は先に2つの3時間使うことができる電池を使うことができて、30分後にそのうちの1つを5時間使えるバッテリーに変えて、2時間半後に残りの電池をさっき交換した電池に交換します(その電池は2.5時間も使えます).これで全部で5.5時間も使えます.少しも無駄がありません.現在、電池の数と電池が使える時間がわかりましたので、できるだけ長く使える方法を探してください.入力入力には複数のデータが含まれています.1行目は整数N(2≦N≦1000)です.電池の数を表し、次の行はN個の正の整数で電池が使える時間を表します.出力は、各セットのデータに対して1行出力され、バッテリが使用できる時間を表し、小数点以下1桁まで保持されます.サンプル入力
サンプル出力
まず、私たちは観察して発見します:すべての電池の使用時間が異なるため、私たちはまた浪費を減らしてすべての電池を合わせて最も長く使うことができて、発見に難くありません:もし私たちが使用時間が最も長い電池を第1戦隊にたとえて、その他の電池は第2戦隊にたとえて、使用時間は戦闘力(比喩はまだイメージでしょ!^^)、そして、二つの戦隊が開戦し、第二戦隊が全力を尽くし、第一戦隊がまだ切れていない場合は、総使用時間が第二戦隊のすべてのエネルギーであることを説明し、本題を取り戻すと、最も長い電池を使用している他の電池の使用時間の和ではなく、第二の場合は、第一戦隊が全力を尽くし、第二の場合は戦隊はまだ掛けていないので、第2戦隊は複数の電池なので、残りも暇にできず、内戦が勃発します.つまり、残りの電池を互いに殺し合い、2本の電池ごとに30分ずつ殺し合います.このようにいつも恨みが终わって(私はどのように形容することを知りません^^)、どうして1时间ではありません30分恨みなのかについては、ここで関系を売って、読者に自分で考えてください^^、このように言うかもしれませんが、コードはすでに明らかです.やはりコードをつけましょう!!
2
3 5
3
3 3 5
サンプル出力
3.0
5.5
まず、私たちは観察して発見します:すべての電池の使用時間が異なるため、私たちはまた浪費を減らしてすべての電池を合わせて最も長く使うことができて、発見に難くありません:もし私たちが使用時間が最も長い電池を第1戦隊にたとえて、その他の電池は第2戦隊にたとえて、使用時間は戦闘力(比喩はまだイメージでしょ!^^)、そして、二つの戦隊が開戦し、第二戦隊が全力を尽くし、第一戦隊がまだ切れていない場合は、総使用時間が第二戦隊のすべてのエネルギーであることを説明し、本題を取り戻すと、最も長い電池を使用している他の電池の使用時間の和ではなく、第二の場合は、第一戦隊が全力を尽くし、第二の場合は戦隊はまだ掛けていないので、第2戦隊は複数の電池なので、残りも暇にできず、内戦が勃発します.つまり、残りの電池を互いに殺し合い、2本の電池ごとに30分ずつ殺し合います.このようにいつも恨みが终わって(私はどのように形容することを知りません^^)、どうして1时间ではありません30分恨みなのかについては、ここで関系を売って、読者に自分で考えてください^^、このように言うかもしれませんが、コードはすでに明らかです.やはりコードをつけましょう!!
#include
#include
using namespace std;
int main()
{
int n,a[1005];
while(scanf("%d",&n)!=EOF) //
{
int max=-1,sum=0;//max ,sum
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i]; //
if(max// いバッテリーを つけ す
}
if((sum-max)/* 1のケース: が も い のすべての が されている
が も いバッテリーを して い ることができない は、 が を いて も いバッテリーであることを します。
その の の の の の は、 し るかもしれませんが、 は で、もう ^^*/
{
printf("%.1f",(sum-max)*1.0); // の を
}
Else/* 2のケース: も いバッテリーを する は
のすべての の の は が も い を い わることができて、 えが が も いことを します
い の と りの を2で って、ここまで んだと じています。
2 のバッテリーが30 も さっている も っています*/
{
printf("%.1f",(sum-max-max)*1.0/2+max);// する を
}
}
return 0;// に わる
}
/* な は しくありませんが、2つ は の かもしれません。
も に っています。
コード は いですが、 するには、やはりそんなに ではありません。もっと してください^^*/