codevs刷題日記(二)
數學高能預警!!!
數學高能預警!!!
數學高能預警!!!
同學們在做題時常遇到這種函式話說這種函式我一點都沒碰到過啊!!!f(x)=5 (x>=0)
f(x)=f(x+1)+f(x+2)+1 (x<0)
下面就以這個函式為題做乙個遞迴程式吧
這道題目不應該叫函式第一次嗎!!
其實這道題蠻簡單的,只要發現一件事情:
[證]:其實資訊競賽裡不一定要你會證,只要有猜想並且猜對了(自己找不出反例),寫上去就基本對了,證明是數學競賽的事。設x=[x]+(0≤<1)
若=0,x=[x],得證。
若≠0
f(x)=f(x+1)+f(x+2)+1 (1)
f(x)=f(x+2)+f(x+3)+1+f(x+2)+1=2*f(x-2)+f(x+3)+1
f(x)=2*(f(x+3)+f(x+4)+1)+f(x+3)=……
∵由此種迭代可設f(x)=pf(x+k)+qf(x+k+1)+r(p,q,r,k∈z,x+k<0)
取k使-1≤x+k<0變形得-1-k≤x<-k
∵[x]∈z,-k∈z
∴-1-k≤[x]+<-k
∵0<<1
∴-1-k-∉z
∴-1-k-≠[x]
∴-1-k< x <-k
假設[x]≠-1-k
若[x]>-1-k即[x]≥-k
則-k>x=[x]+>[x]≥-k
矛盾!
若[x]<-1-k即[x]≤-2-k
則∵-1-k-[x]≥1,[x]+-(-1-k)>0
∴>1
矛盾!
綜上[x]=-1-k
∵(x+k+1)>0
∴由上得([x]+k+1)≥-1-k+k+1=0
∴f(x)=pf(x+k)+qf(x+k+1)+r=p(f(x+k+1)+f(x+k+2)+1)+qf(x+k+1)+r
=p(5+5+1)+5q+r
=p(f([x]+k+1)+f([x]+k+2)+1)+qf([x]+k+1)+r
=pf([x]+k)+qf([x]+k+1)+r =f([x])
得證
利用這個結論可以直接取整加入(後來發現資料好像只有整數。。。)
ac**:
#include< bits/stdc++.h>(關於為什麼不用陣列儲存一下值以便重複利用,我是開了乙個的,但是忘了儲存……)using namespace std;
int m,fn[101];
double l;
int f(int n)//遞迴
int main()
後記:
其實當初我是以為要讀入小數,然後自己寫取整。
一氣之下求出了這個玩意的通項公式:(以x∈z舉例,其餘利用上方結論)
取m=-x(此時正在思考為什麼要算這個)f(m)= +f(m-2)+1
f(m-1)=f(m-2)+f(m-3)+1
消去常數
f(x)=2f(x-1)-f(x-3
利用特徵方程
x^3-2x^2+1=0
x1=1
x2=(-1+sqrt(5))/2
x3=(-1-sqrt(5))/2
代入計算得:(我已經不知道算的對不對了…腦袋已經昏了)
f(m)=19-7*((-1+sqrt(5))/2)^m+((-1-sqrt(5))/2)^m)
沒錯你們可以用快速冪了
但首先你得把(-1±sqrt(5))/2)寫進去….
leetcode 刷題日記
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。採用乙個帶頭節點的指標head鏈結合併後的新指標,乙個空指標pre進行迴圈載入兩個鍊錶中的節點比較兩個鍊錶節點的值,pre指標鏈結較小值的鍊錶的節點,依次遍歷兩個鍊錶,直到乙個為空停止迴圈。複雜度分析 時間複...
leetcode 刷題日記
題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。解題思路 按照最長鍊錶的長度遍歷兩個...
leetcode刷題日記
給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 2,3,1...