巧克力棒(chocolate)
time limit:1000ms memory limit:64mb
題目描述
lyk 找到了一根巧克力棒,但是這根巧克力棒太長了,lyk 無法一口吞進去。
具體地,這根巧克力棒長為 n,它想將這根巧克力棒折成 n 段長為 1 的巧克力棒,然後
慢慢享用。
它打算每次將一根長為 k 的巧克力棒折成兩段長為 a 和 b 的巧克力棒,此時若 a=b,則
lyk 覺得它完成了一件非常困難的事,並會得到 1 點成就感。
lyk 想知道一根長度為 n 的巧克力棒能使它得到最多幾點成就感。
輸入格式(chocolate.in)
第一行乙個數 n。
輸出格式(chocolate.out)
乙個數表示答案。
輸入樣例
7輸出樣例
4資料範圍
對於 20%的資料 n<=5。
對於 50%的資料 n<=20。
對於 80%的資料 n<=2000。
對於 100%的資料 n<=1000000000。
樣例解釋
將 7 掰成 3+4, 將 3 掰成 1+2, 將 4 掰成 2+2 獲得 1 點成就感, 將剩下的所有 2 掰成 1+1
獲得 3 點成就感。總共 4 點成就感。
1 #include2 #include3 #include4using
namespace
std;
5long
long
a,b;
6int
main()
715 printf("
i64d
",b);
1617
return0;
18}19/*
20思路(解析):
21發現ans=n-c(n)。c(n)表示n的二進位制中1的個數。
2223
粘乙個嚴謹的證明(其實我自己也沒認真看)
24我們對c(n)進行歸納。
25當c(n)=1時,即n=2^k,ans(n)顯然=(n-1)。
26我們假設c(n)<=x的情況下ans(n)=n-c(n)都成立。
27當c(n)=x+1時,我們要證明ans(n)=n-c(n)。
28令j為不超過n的2的冪次的最大值,
29有ans(n)=ans(n-j)+ans(j)=n-j-(c(n)-1)+j-1=n-c(n)。
30即ans(n)的下界為n-c(n)。
31將ans(n)分成兩個數i,j時有c(i)+c(j)>=c(n)。
32當i不等於j時,有ans(n)<=i-c(i)+j-c(j)<=n-c(n)。
33當i=j時,有c(i)+c(j)=2*c(n),
34ans(n)<=i-c(i)+j-c(j)+1<=n-c(n)*2+1,c(n)是正整數。
35綜上,ans(n)的上界也為n-c(n)。假設成立
36*/
濟南學習 Day 3 T1 pm
巧克力棒 chocolate time limit 1000ms memory limit 64mb 題目描述 lyk 找到了一根巧克力棒,但是這根巧克力棒太長了,lyk 無法一口吞進去。具體地,這根巧克力棒長為 n,它想將這根巧克力棒折成 n 段長為 1 的巧克力棒,然後 慢慢享用。它打算每次將一...
濟南學習 Day 3 T3 pm
仙人掌 cactus time limit 1000ms memory limit 64mb 題目描述 lyk 在衝刺清華集訓 thusc 於是它開始研究仙人掌 它想來和你一起分享它最近 研究的結果。如果在乙個無向連通圖中任意一條邊至多屬於乙個簡單環 簡單環的定義為每個點至多 經過一次 且不存在自環...
濟南學習 Day 3 T2 pm
lyk 快跑!run time limit 5000ms memory limit 64mb 題目描述 lyk 陷進了乙個迷宮!這個迷宮是網格圖形狀的。lyk 一開始在 1,1 位置,出口在 n,m 而且這個迷宮裡有很多怪獸,若第 a 行第 b 列有乙個怪獸,且此時 lyk 處於第 c 行 d 列,...