ロスP1011バレー駅
リンク
https://www.luogu.org/problem/P1011
タイトル
タイトル説明
(第一ステーションと呼ぶ)発信局からの列車は、駅の発信数であり、そして第2のステーションに達すると、ステーション22がオフ、最初にあった、しかし、オフの同数したがって、第二ステーションアウト(すなわち、第三のステーションに到達する前)は、ボード上の人の数で維持されます。フロント2上の車の数が数と駅で、駅までは上の人物の数に等しい下車:第三は、(3局を含む)立ってからは、人々の数は一定のルールがある乗り降り端末局(第局n-1)の前に、このルールを満たします。条件が今与えられる:Nトータルステーション、発信局の数は、最後のストップの数がm(全てオフ)です。どのくらいの駅は、X車のうち数を聞いているとき?
入力形式
(≤20)、N(≤20)、M(≤2000)、およびX(≤20)
出力フォーマット
ときは車の外駅からの人のX番号。
サンプル入力と出力
入力#1
5 7 32 4
出力#1
13
ダイヤグラム
ステーション番号(i) | 電車の中で(F) | (G)下車 | 残数(K) |
---|---|---|---|
1 | A | 0 | A |
2 | トン | トン | A |
3 | + T | トン | 図2(a) |
4 | + 2トン | + T | 2A + T |
5 | 2A + 3トン | + 2トン | 3A + 2トン |
6 | 0 | 3A + 2トン | 0 |
考え
(数駅間)の法則をまとめます
1. 每一站下车人数等于上一站上车人数
2. 每一站上车人数等于前两站上车人数和
我々は、すべてのオフ局6は、表に示すことができ、それが要約見つけることができると仮定する
(sはフィボナッチ数であり、直接計算することができます)
1. g(i) = f(i-1)
2. f(i) = f(i-1) + f(i-2)
3. g(n) = f(n-1) + a - t = m
4. f(i) = s(i-2)*a + s(i-1)*t
5. k(i) = f(i) + f(1) - g(2)
唯一の2つの派生方程式後T、 - 我々は見つけることができた後、我々は、K(X)= F(X)+必要
1. m - [s(n-3) + 1]*a = [s(n-2) - 1]*t
2. k(x) = [s(x-2) + 1]*a + [s(x-1) - 1]*t
、私たちMを与え、N、我々は式(1)tで計算することができ、式(2)は、K(X)を算出します。
コード
#include<iostream>
using namespace std;
int main()
{
int a,n,m,x,t;
cin>>a>>n>>m>>x;
int s[n];
s[1]=1;
s[2]=1;
for(int i=3;i<=n;i++)
s[i]=s[i-1]+s[i-2];
t=(m-(s[n-3]+1)*a)/(s[n-2]-1);
cout<<(s[x-2]+1)*a+(s[x-1]-1)*t;
return 0;
}