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; }