CodeVS刷題日記 1842 白銀

2021-08-07 14:23:06 字數 1947 閱讀 5764

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...