害!很久之前刷了一些題目,但是由於課程實在是沒時間好好品題(其實是太懶了)決心好好嚼一些當時沒有ac的題目!
【注:我是ac一題然後寫一題報告的,可能演算法有錯誤或者演算法不是最優,本人小白也請見諒 xd】
ac**:
#include
using namespace std;
typedef
long
long ll;
intmain()
return0;
}
係數1
係數2112
1325
385可以看到是乙個類似遞推的係數關係,我們先列舉k為前100項的係數1和係數2
x1[1]
=1;x2[1]
=1;for
(int i=
2;i<=
1000
;++i)
我們的意圖是f(n)=係數1* f(n/2k) + 係數2* f(n/2k+1)
我們需要把n/2k壓得盡可能小,這樣f(n/2k) 與 f(n/2k+1) 我們可以輕易列舉
因為k增大1,2k增大一倍,那乙個loop就可以搞定求出適當的k了
ac**:
#include
#define show(x) std::cerr << #x << "=" << x << std::endl
using namespace std;
typedef
long
long ll;
const
int max =
1e5+50;
const
double eps =
1e-10
;ll cnt[
120]
;//存f(n)
ll x1[
1000
],x2[
1000];
//存係數1與係數2序列
ll qpow
(ll a,ll n)
n>>=1;
a=a*a;
}return ans;
}int
main()
x1[1]
=1;x2[1]
=1;for
(int i=
2;i<=
1000
;++i)
while
(cas--
) ll k=1;
while
(n>
100*
qpow(2
,k))k++
;//算合適的k
printf
("%lld\n"
,x1[k]
*cnt[n/
qpow(2
,k)]
+x2[k]
*cnt[n/
qpow(2
,k+1)]
);//見上公式帶入
//printf("%lld %lld\n",x1[k]*cnt[n/qpow(2,k)]+x2[k]*cnt[n/qpow(2,k+1)],cnt[n]);
}return0;
}
廣東工業大學程式設計競賽決賽 C
小時候,我只能一階一階得爬樓梯,後來,我除了能一次爬一階,還可以一次爬兩階,到現在,我最多一次可以爬三階。那麼現在問題來了,我想爬上 n層樓,相鄰樓層之間有一段樓梯,雖然我一次可以爬 1個台階 2個台階和 3個台階,但是我在i與 i 1層之間的樓梯上時,我不能跨越到 i 1與 i 2層之間的樓梯。現...
廣東工業大學賽 H tmk買禮物
今天是校賽的日子,為了慶祝這麼喜慶的日子,tmk打算買些禮物給女票 lsh慶祝一下。tmk進入了雪梨超市,然後剛踏入的一瞬間,店主就對 tmk說 恭喜你成為了本店第 2147483647 位顧客,本店在搞乙個活動,對本店第 2147483647 位顧客進行贈送活動。你先看看你有多少錢?tmk一摸口袋...
2017廣東工業大學程式設計競賽決賽 E(倒水)
problem e 倒水 water description 一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著 cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。不能丟棄有水的瓶子 ...