傳送門
ros最近開始做水題了
可能是前段時間做數論題做到推導遞推式子的題做多了所以一上來做這題就推導式子然後寫完**發現樣例沒過。
這是怎麼回事?
後來ros發現問題出在兩個數字都是符合斐波那契數列關係的,而ros一開始推導式子的時候以為其中乙個量是符合線性關係的所以出現了問題。
好的現在bug都解決了開始分析:
先寫下每一站上車下車人數。
我們定義第一站上車人數為a,第二站上下車人數為ans,fib[i]表示斐波那契數列的第i項(此處假想fib[0]=0,方便計算且不會影響其正確性)
那麼根據題目中所給的規律很容易得出:對於第k輪(k>=3),第k輪的下車人數總是和第k-1輪的上車人數相同。①
所以這道題變變成了一道小學六年級數學拓展題,即我們對於n-1輪有上下車的輪次並且上下車人數符合①輪次的情況中,第k站的車上的人數變不需要考慮中間輪次的上下車情況了(原理類似差分陣列)。
那麼我們需要考慮的便只有第n-1站和第一站上車人數以及第二站上車人數對整體的影響了!
所以可以說我們如果得到了第k輪上車人數的數量就可以得到第k輪車上的人數了。(k>=3,下面的k的範圍均同此處)
順便說一下:如果k<=2那每一輪車上的人數都應該是a。(正確性顯然)
那麼我們當寫出每一輪上車人數時便可以發現第k輪(k>=3)上車人數便是fib[k-2]*a+fib[k-1]*ans
所以對於第k輪車上的人數我們可以知道為第k輪上車人數+第一輪上車人數-第二輪下車人數
所以第k輪車上人數為:fib[k-2]*a+fib[k-1]*ans+a-ans ②
所以我們可以得到m=第n-1輪上車人數+第1輪上車人數-第2輪下車人數=fib[n-3]*a+fib[n-2]*ans+a-ans
所以我們移項就可以得到ans=(m-fib[n-3]*a-a)/(fib[n-2]-1)
由於右側所有數均為已知量所以ans可求,再根據②式便可求第x輪車上的人數。
**如下:
#includeusing namespace std; //p1011車站
int a,n,m,x;
int ans; //第二站上下車人數
int final; //最終答案
int fib[25];
int main()
scanf("%d%d%d%d",&a,&n,&m,&x);
if(n-4>=0)
else
}else
printf("%d",final);
return 0;
}
(最後吐槽一下:這道題某谷評分為普及-但是說實話如果這道題是一道純推導題的話我感覺給他乙個普及的名分也是可以的。可惜可能是我做題總是想不到更簡單的方法只會直接推導,比如——打表《這道題某谷題解裡居然有人打表做呀我真的無語了》)
還有就是這題某谷上的資料只有四個資料點我一開始寫的**有一處不完善的地方居然也給我ac了。這資料也太水了吧。
題解 P1011 車站
posted on 2019 08 20 22 07 29 蒟蒻的第一篇題解 教你怎樣打表 這一道題目其實是個數學題,也不是很難,我們可以先在草稿紙上寫一下 用 x,y 代表a和b的係數12 3456 上車u 1,0 0,1 1,1 1,2 2,3 3,5 下車d 0,0 0,1 0,1 1,1 1...
洛谷 P1011 車站 (暴力)
題目鏈結 火車從始發站 稱為第 1 站 開出,在始發站上車的人數為 a 然後到達第 2 站,在第 2 站有人上 下車,但上 下車的人數相同,因此在第 2 站開出時 即在到達第 3 站之前 車上的人數保持為 a 人。從第 3 站起 包括第 3 站 上 下車的人數有一定規律 上車的人數都是前兩站上車人數...
刷題報告003 洛谷P1011 車站
哎,昨天好怠惰只想玩 結果對著一道高精度看了半天覺得自己還是算了吧hhh 今天起來就沒有看那道高精度 雖然知道基本思想是什麼但是不會寫 於是寫了一道水題,基本就是找規律 遞迴,沒什麼技術難度 廢話有技術難度的題目並不會寫 題目描述 火車從始發站 稱為第1站 開出,在始發站上車的人數為a,然後到達第2...