1837 砝碼稱重
基準時間限制:1 秒 空間限制:131072 kb 分值: 80 難度:5級演算法題
小 q 有 n 個砝碼,它們的質量分別為 1 克、 2 克、……、 n 克。
他給 i 克的砝碼標上了編號 i (i = 1, 2, ..., n),但是編號被人打亂了,即編號為 i 的砝碼不一定是 i 克,而是 a_i 克,這裡 a 指的是 1 到 n 的乙個排列。
他有一桿天平,可以向天平的兩側放任意數量的砝碼,通過一次稱量得到兩側質量的大小關係,關係只有左側重、一樣重、右側重三種可能。
他想知道,最壞情況下,他至少需要稱量多少次,才能確定其中至少乙個編號為 i 的砝碼的質量是 i 克或不是 i 克。
例如 n = 6 時,可以只稱量一次,選擇編號為 1、 2、 3 的砝碼放在左側,編號為 6 的砝碼放在右側。
如果天平不是平的,則可以確定存在至少乙個砝碼 i 不是 i 克 (i = 1, 2, 3, 6),否則編號為 6 的砝碼一定是 6 克。
再例如 n = 5 時,可以只稱量兩次,第一次選擇編號為 2、3 的砝碼放在左側,編號為 5 的砝碼放在右側,第二次選擇編號為 1、4 的砝碼放在左側,編號為 5 的砝碼放在右側。
這裡略去這樣稱量的正確性,留給做題人推導和證明。
input
輸入包含多組測試資料。output每行對應一組測試資料,包含乙個正整數 n 。
不超過 10^5 組資料,1 ≤ n ≤ 10^9。
每行對應一組測試資料,輸出乙個正整數表示答案。input示例
1output示例56
021//演算法馬拉松還是厲害啊,4級題,賽後公升5級了。。。結果想了半天,只考慮到部分情況
51nod 1837 砝碼稱重
寫得很詳細了。。。但是最後一條還是不懂orz
1 #include 2view codeusing
namespace
std;
3#define inf 0x3f3f3f3f
4#define eps 1e-9
5#define ll long long
6#define mx 5000578
intmain()925
return0;
26 }
1837 砝碼稱重
小 q 有 n 個砝碼,它們的質量分別為 1 克 2 克 n 克。他給 i 克的砝碼標上了編號 i i 1,2,n 但是編號被人打亂了,即編號為 i 的砝碼不一定是 i 克,而是 a i 克,這裡 a 指的是 1 到 n 的乙個排列。他有一桿天平,可以向天平的兩側放任意數量的砝碼,通過一次稱量得到兩...
51nod 1837 砝碼稱重 (規律)
小 q 有 n 個砝碼,它們的質量分別為 1 克 2 克 n 克。他給 i 克的砝碼標上了編號 i i 1,2,n 但是編號被人打亂了,即編號為 i 的砝碼不一定是 i 克,而是 a i 克,這裡 a 指的是 1 到 n 的乙個排列。他有一桿天平,可以向天平的兩側放任意數量的砝碼,通過一次稱量得到兩...
砝碼稱重 DP
砝碼稱重 問題描述 設有1g 2g 3g 5g 10g 20g的砝碼各若干枚 其總重 1000 用他們能稱出的重量的種類數。輸入檔案 a1 a2 a3 a4 a5 a6 表示1g砝碼有a1個,2g砝碼有a2個,20g砝碼有a6個,中間有空格 輸出檔案 total n n表示用這些砝碼能稱出的不同重量...