ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

P1011 [NOIP 1998 提高组] 车站

P1011 [NOIP 1998 提高组] 车站

image

不就是斐波那契数列吗?

那么我们就可以求出一个站上上车的人数(分别有几个a和b)

由于第一站和第二站a没有连续增加,从第三站才开始连续加,所以一个站上上车的a的系数就是f[第几站-2]。

由于b从第二站就开始连续加了,所以一个站上上车的b的系数就是f[第几站-1];

所以一个站上上车的人数就是f[第几站-2]a+f[第几站-1]b;

通过观察表格可知,每一站上还有的人,除这一站上车的人,第一站上车的a人和第二站下车的b人,其余都可以消掉。(自己去看看就知道了)所以在每个站上还有的人数就是:(f[第几站-2]+1)a+([第几站-1]-1)b

m实质上就是上一站还有的人,最关键的方程就列出来了:

m=f[n-1-2]a+f[n-1-1]b+a-b
化简得:
b=(m-(f[n-3]+1)*a)/(f[n-2]-1)

#include<bits/stdc++.h>
using namespace std;
int a,n,m,x,b,f[20];
int main(){scanf("%d%d%d%d",&a,&n,&m,&x);f[1]=1;for(int _=2;_<=n-1;f[_]=f[_-1]+f[_-2],_++);b=(m-(f[n-3]+1)*a)/(f[n-2]-1);cout<<(f[x-2]+1)*a+(f[x-1]-1)*b<<endl;return 0;
}
返回列表