不妨设第 (2) 站上车和下车的乘客数量均为 (y)。
站编号 | 上车人数 | 下车人数 | 开出时车上人数 |
---|---|---|---|
(1) | (a) | (0) | (a) |
(2) | (y) | (y) | (a) |
(3) | (a+y) | (y) | (2a) |
(4) | (a+2y) | (a+y) | (2a+y) |
(5) | (2a+3y) | (a+2y) | (3a+2y) |
(6) | (3a+5y) | (2a+3y) | (4a+4y) |
(7) | (5a+8y) | (3a+5y) | (6a+7y) |
但 (y) 是未知的,所以先推一遍算出关于 (a) 的常数和 (y) 的系数,解出 (y) 的值,然后再推到 (x) 站算出答案。
code:
#include<bits/stdc++.h>
using namespace std;
#define For(i,x,y)for(i=x;i<=(y);i++)
int main()
{
int i,a,n,m,x,u,v,p,q,b,c=1,d,t,y,s;
cin>>a>>n>>m>>x;
if(x<3)cout<<a,exit(0);
if(n==x)cout<<0,exit(0);
u=s=a;
v=b=t=0;
For(i,3,n-1)
{
d=b+c;
/*cout<<i<<' '<<b<<' '<<c<<' '<<d<<endl;*/
t+=d-c;
b=c;
c=d;
p=u+v;
q=v;
s+=p-q;
u=v;
v=p;
}
y=(m-s)/t;
/*cout<<y<<endl;*/
u=s=a;
v=y;
For(i,3,x)
{
p=u+v;
q=v;
/*cout<<i<<' '<<u<<' '<<v<<' '<<p<<endl;*/
s+=p-q;
u=v;
v=p;
}
cout<<s;
return 0;
}