原题链接
水题。
设(k)表示第二站上车人数,用(a)和(k)表示出每一站的上下车人数和剩余人数,列个五六项就出来了。
从第(4)站开始,车里剩余人数就开始有规律了,(a)的系数为前两站剩余人数中(a)的系数之和再(-1),(k)的系数为前两站剩余人数中(k)的系数之和再(+1)。
推到第(n - 1)项就可以算出(k),然后就可以算出过了(x)站的剩余人数了。
#include<cstdio>
using namespace std;
const int N = 25;
int A[N], B[N];
int main()
{
int a, n, m, x, i;
scanf("%d%d%d%d", &a, &n, &m, &x);
for (A[1] = A[2] = 1, A[3] = 2, i = 4; i < n; i++)
{
A[i] = A[i - 1] + A[i - 2] - 1;
B[i] = B[i - 1] + B[i - 2] + 1;
}
printf("%d", a * A[x] + ((m - a * A[n - 1]) / B[n - 1]) * B[x]);
return 0;
}