51nod1246罐子與硬幣

2021-08-22 11:30:36 字數 1239 閱讀 9281

1246 罐子和硬幣

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 難度:3級演算法題

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1-n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個(但你不知道該罐子中還有多少硬幣),如果該罐子是空的,你得不到任何硬幣,但會消耗1次詢問的機會。你最終要得到至少c枚硬幣(c <= k),問題是給定n,k,c,由你來選擇一種分配方式,使得在最壞情況下,詢問的次數最少,求這個最少的次數。

例如:有3個罐子,10個硬幣,需要得到7個硬幣,(n = 3, k = 10, c = 7)。

你可以將硬幣分配為:3 3 4,然後對於每個罐子詢問2次,可以得到6個硬幣,再隨便詢問乙個罐子,就可以得到7個硬幣了。

input

輸入3個數:n,k,c (1 <= n <= 10^9, 1 <= c <= k <= 10^9)。
output

輸出最壞情況下所需的最少詢問次數。
input示例

4 2 2
output示例

4
本以為是平均分突然發現平均分有些資料不行//45 64 54  67 錯誤**示例:=.=

#include#include#include#define maxn  1000000005

#define ll long long

using namespace std;

int main()

else

k-=q*n;

w+=q*n;

sum+=q*n;}}

cout就想肯定是分情況的,一種是能平鋪玩的,還有一種是能找到盡量小的0,使得剩下的能全部平鋪,這樣結果就是   空罐子個數加上所詢問的硬幣個數,而最小的空罐子個數就是  用總的硬幣數/(最少平均放的到最少罐子的個數+1)

#include#include#include#define maxn 1000000005

#define ll long long

using namespace std;

int main()

//當能平鋪完肯定是平鋪詢問次數最小

else

cout<

return 0;

}//45 64 54 67 //18 10 8 16

51nod 1246 罐子和硬幣

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1 n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個 但你不知道該罐子中還有多少硬幣 如果該罐子是空的,你得不到任何硬...

51Nod 1246 罐子和硬幣

acm模版 這裡需要強調的是,分配是我們決定的,拿的方案也是我們決定的,所以,這裡預設是我們知道每個罐子可能擁有的硬幣個數。一開始沒有讀懂這層隱藏條件,所以自己想了半天也沒有想通樣例 接著,我們需要考慮的是兩大種情況四小種情況 第一 無抓空情況,結果一定是c次。1 每個罐子的硬幣個數我們都知道 一定...

51nod1246 罐子和硬幣

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1 n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個 但你不知道該罐子中還有多少硬幣 如果該罐子是空的,你得不到任何硬...