貪心演算法 牛客倒水

2021-10-05 16:19:41 字數 1689 閱讀 4406

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

題目描述

有乙個大水缸,裡面水的溫度為t單位,體積為c公升。另有n杯水(假設每個杯子的容量是無限的),每杯水的溫度為t[i]單位,體積為c[i]公升。

現在要把大水缸的水倒入n杯水中,使得n杯水的溫度相同,請問這可能嗎?並求出可行的最高溫度,保留4位小數。

注意:一杯溫度為t1單位、體積為c1公升的水與另一杯溫度為t2單位、體積為c2公升的水混合後,溫度變為(t1c1+t2c2)/(c1+c2),體積變為c1+c2。

輸入描述:

第一行乙個整數n, 1 ≤ n ≤ 10^5

第二行兩個整數t,c,其中0 ≤ t ≤ 10^4, 0 ≤ c ≤ 10^9

接下來n行每行兩個整數t[i],c[i]

0 ≤ t[i], c[i] ≤ 10^4

輸出描述:

如果非法,輸出「impossible」(不帶引號)否則第一行輸出「possible"(不帶引號),第二行輸出乙個保留4位小數的實數表示答案。

樣例解釋:往第二杯水中倒0.5公升水

往第三杯水中到1公升水

三杯水的溫度都變成了20

輸入:

3102

201251

301

輸出:

possible

20.0000

思路:

先根據溫度排個序,把所有的水混一塊後的溫度求出。

再分三種情況:

第一種:如果加的水的溫度小於最低溫度,

第二種:如果加的水的溫度大於最高溫度

第三種:位於兩者之間,則不可能達到同一溫度

溫度公升高,比t低的永遠也比它低,比它高的永遠也比它高,因此第一種情況不可能成立,只能無限接近不能達到一致

sort函式用法:sort函式用法

**:

#include

using

namespace std;

typedef

long

long

int ll;

double tc,c;

ll m;

struct node

//定義優先順序

}p[10010];

intmain()

double ans=sum*

1.0/sumc;

//將所有水混一塊 後的溫度

sort

(p+1

,p+1

+m);

//排序

if(tc.t&&tc>p[1]

.t)//如果位於中間的話,則不可能

else

if(p[m]

.t<=tc)

//如果tc的溫度大於最高溫度,則證明之能公升溫

}else

//如果tc的溫度小於最低溫度,只能降溫

}return0;

}

牛客 倒水問題

待學習。study.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include include using namespace std 將4杯子倒水問題改為乙個足夠大的杯子倒向4個杯子 bitset 17043521 hash...

牛客 牛牛的揹包 貪心演算法

時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 題目描述 牛牛有最多50個物品,每個物品有乙個type標號,並且有乙個taste值,現在要求選擇若干個物品放進揹包使得x y最大,x為選擇的不同type的數量,y...

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...