【题解】Luogu P1011 车站
生活随笔
收集整理的這篇文章主要介紹了
【题解】Luogu P1011 车站
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
火車從始發站(稱為第1站)開出,在始發站上車的人數為a,然后到達第2站,在第2站有人上、下車,但上、下車的人數相同,因此在第2站開出時(即在到達第3站之前)車上的人數保持為a人。從第3站起(包括第3站)上、下車的人數有一定規律:上車的人數都是前兩站上車人數之和,而下車人數等于上一站上車人數,一直到終點站的前一站(第n-1站),都滿足此規律。現給出的條件是:共有N個車站,始發站上車的人數為a,最后一站下車的人數是m(全部下車)。試問x站開出時車上的人數是多少?
輸入輸出格式
輸入格式:
a(<=20),n(<=20),m(<=2000),和x(<=20),
輸出格式:
從x站開出時車上的人數。
輸入輸出樣例
輸入樣例#1: 復制
5 7 32 4
輸出樣例#1: 復制
13
思路
| 上車人數 | a | b | a+b | a+2b |
| 下車人數 | 0 | b | b | a+b |
| 車上人數 | a | a | 2a | 2a+b |
可以推出
第i站上車人數為$f[i-2]*a+f[i-1]*b (i>=2)$
下車人數為$f[i-3]*a+f[i-2]*b (i>=3)$
車上人數為$f[i-2]*a+a+f[i-1]*b-b (i>=2)$
- 由題可知最后一站所有人都下車,所以下車的人數就是倒數第二站車上的總人數
-
即
$$m= f[i-2]*a+a+f[i-1]*b-b$$ -
帶入公式即可得
代碼
?
1 #include<cstdio> 2 int f[25]={0,1}; 3 int main(){ 4 int n,a,m,x,b;scanf("%d%d%d%d",&a,&n,&m,&x); 5 for(int i=2;i<n;i++)f[i]=f[i-1]+f[i-2]; 6 b=(m-f[n-3]*a-a)/(f[n-2]-1); 7 if(x==1)printf("%d",a); 8 else printf("%d",(f[x-2]+1)*a+(f[x-1]-1)*b); 9 return 0; 10 }?
?轉載于:https://www.cnblogs.com/bbqub/p/8425341.html
總結
以上是生活随笔為你收集整理的【题解】Luogu P1011 车站的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVC5+EF6 入门完整教程四
- 下一篇: Bootloader之uBoot简介(转