ロスP1011バレー駅

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

おすすめ

転載: www.cnblogs.com/blogxjc/p/11287961.html