缺失的資料範圍
著名出題人小q出過非常多的題目,在這個漫長的過程中他發現,確定題目的資料範圍是非常痛苦的一件事。
每當思考完一道題目的時間效率,小q就需要結合時限以及評測機配置來設定合理的資料範圍。 因為確定資料範圍是一件痛苦的事,小q出了非常多的題目之後,都沒有它們設定資料範圍。對於一道題目,小q會告訴你他的演算法的時間複雜度為o(nalogbn)o(nalogbn),且蘊含在這個大oo記號下的常數為11。同時,小q還會告訴你評測機在規定時限內可以執行kk條指令。小q認為只要na(⌈log2n⌉)bna(⌈log2n⌉)b不超過kk,那麼就是合理的資料範圍。其中,⌈x⌉⌈x⌉
表示最小的不小於xx的正整數,即xx上取整。
自然,小q希望題目的資料範圍nn越大越好,他希望你寫乙個程式幫助他設定最大的資料範圍。 input第一行包含乙個正整數t(1≤t≤1000)t(1≤t≤1000),表示測試資料的組數。
每組資料報含一行三個正整數a,b,k(1≤a,b≤10,106≤k≤1018)a,b,k(1≤a,b≤10,106≤k≤1018),分別描述時間複雜度以及允許的指令數。output對於每組資料,輸出一行乙個正整數nn,即最大可能的nn。
sample input3
1 1 100000000
2 1 100000000
1 3 200000000
sample output
4347826
2886
48828
嗯。。數學題。。不會。。
二分,等式兩邊同時取對數,注意精度。
ac**(抄的別的部落格):
#include
using namespace std;
typedef
long
long ll;
ll t,n,m,i,a,b,k,ans;
ll fast
(ll x,ll y)
return num;
}ll logn2
(ll m)
}int
judge
(ll mid)
m=logn2
(mid)
;///取整,這裡卡ceil()!!!還是自己寫叭
if(m==0)
return1;
///確保下面分母不為零,n=1時
else}if
(num1<=k/num2)
///小於給定值,是為了防爆嗎??
return1;
else
return0;
}int
main()
cout<'\n';}
return0;
}
不知道為啥把快速冪換成1<還不知道這樣做為啥取對數時不會有損失。(期待大佬解答!) hdu6288 缺失的資料範圍(二分,大數)
題意 給定a,b,k,要求找到乙個最大的n,滿足na log 2n 2 k n a lceil log n rceil 2 k na lo g2 n 2 k 資料範圍 1 a,b 10,1e6 k 1e18 解法 顯然n是單調的,那麼二分n即可。然而會爆longlong,有的人unsigned過了,...
hdu 6288 二分法加精度處理問題)
題意 給出a,b,k,n可滿足 n a log2n b k k 求最大的n值 三個正整數a,b k 1 a,b 10,10 6 k 1018 a,b,k 1 a,b 10,10 6 k 10 18 題目思路 這類給數學式子求n的最大值,且資料量大且多的,考慮時間複雜度,我們採用二分法找出n 思路 很...
HDU 6231 (二分 尺取)
所求的一定是a陣列中的原素,這點毋庸置疑,所以在a陣列中任意選則其中的乙個數x,若a的所有長度不小於k的連續子串行中第k大數不小於x的子串行一共有ans個,那麼x在所有第k大元素組成的數列中至少是第ans大數 因為ans n r,因為之前的x已經是第k大了,所以加上後面的元素,如果比他小,則沒有影響...