1837 砝碼稱重

2022-04-11 02:20:30 字數 1252 閱讀 9345

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

輸入包含多組測試資料。

每行對應一組測試資料,包含乙個正整數 n 。

不超過 10^5 組資料,1 ≤ n ≤ 10^9。

output

每行對應一組測試資料,輸出乙個正整數表示答案。
input示例

1

56

output示例

021

//演算法馬拉松還是厲害啊,4級題,賽後公升5級了。。。結果想了半天,只考慮到部分情況

51nod 1837 砝碼稱重

寫得很詳細了。。。但是最後一條還是不懂orz

1 #include 2

using

namespace

std;

3#define inf 0x3f3f3f3f

4#define eps 1e-9

5#define ll long long

6#define mx 5000578

intmain()925

return0;

26 }

view code

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表示用這些砝碼能稱出的不同重量...