https://www.luogu.org/problem/P1011

车上人数 上车人数
a a

a y

2a a+y

2a+y a+2y

3a+2y 2a+3y

4*** 3a+5y

6a+7y 5a+8y

9a+12y 8a+13y

14a+20y 13a+21y

22a+33y 21a+34y


4***=32 y=3

code:

#include<cstdio>
using namespace std;
double now[10005];
double shang[10005];
int main()
{
    double a,m;
    int n,x;
    scanf("%lf%d%lf%d",&a,&n,&m,&x);
    now[1]=1;
    now[2]=1;
    now[3]=2;
    for(int i=4;i<n;i++)
    {
        now[i]=now[i-1]+now[i-2]-1;
        shang[i]=shang[i-1]+shang[i-2]+1;//结果发现车上人数是前两次的和-1;上车人数是前两次的和+1;
    }
    double y=(m-now[n-1]*a)/shang[n-1];
    printf("%d\n",(int)(now[x]*a+shang[x]*y));
    return 0;
}