P1011 [NOIP1998 提高组] 车站 题解
一个纯纯的找规律题。不妨列出几站的上车、下车、车上人数:
| 站 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 上车 | ||||||||
| 下车 | ||||||||
| 车上人数 | ||||||||
| 前两站车上人数的和 |
观察第一行和第二行
并且很明显可以发现第四行
所以不用管前两行,把第三行直接列出来就行了。
算完这些,
最后答案即为
#include <iostream>
using namespace std;
int up[25] = {0, 0, 1, 2}, down[25];
int main() {
int a, n, m, x;
cin >> a >> n >> m >> x;
for(int i = 4; i < n; i ++)
up [i] = up [i - 1] + up [i - 2] - 1,
down[i] = down[i - 1] + down[i - 2] + 1;
int ed = (m - a * up[n - 1]) / down[n - 1];
cout << a * up[x] + ed * down[x];
}