zoukankan      html  css  js  c++  java
  • 2287 火车站

    题目链接:http://codevs.cn/problem/2287/
    题目描述 Description

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问从x站开出时车上的人数是多少?若无解输出“No answer.”(所有数据均在longint范围内)

    输入描述 Input Description

    a,n,m和x

    输出描述 Output Description

    x站开出时车上的人数

    样例输入 Sample Input

    1 6 7 3

    样例输出 Sample Output

    2

    数据范围及提示 Data Size & Hint

     算法分析:

    假设第2站上车人数y,下车人数也是y。根据题目意思可以有如下表格:

    观察发现上车、下车人数这两行里面a和y的系数分别独自形成斐波那契数列。

    所以,定义结构体struct  obj,含两个成员项p和q分别表示a和y的系数。

    最后一个车站下车人数m等于第n-1个车站出发的人数。上表中有6a+7y=m,已知a即可求得y。若y为整数则有解,若y不为整数则无解。

    若是有解则可以根据y计算第x个车站出发时的人数。具体参考代码: 

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 struct obj
     4 {
     5     int p,q;
     6 };
     7 int main()
     8 {
     9     struct obj up[25],down[25],sum[25];
    10     int i,a,m,n,x;
    11     int y,ans;
    12     scanf("%d%d%d%d",&a,&n,&m,&x);
    13 
    14     up[1].p=1; up[1].q=0;
    15     up[2].p=0; up[2].q=1;
    16 
    17     down[1].p=0; down[1].q=0;
    18     down[2].p=0; down[2].q=1;
    19 
    20     sum[1].p=1; sum[1].q=0;
    21     sum[2].p=1; sum[2].q=0;
    22 
    23     for(i=3;i<n;i++)
    24     {
    25         up[i].p=up[i-1].p+up[i-2].p;
    26         up[i].q=up[i-1].q+up[i-2].q;
    27         down[i].p=up[i-1].p;
    28         down[i].q=up[i-1].q;
    29         sum[i].p=sum[i-1].p+up[i].p-down[i].p;
    30         sum[i].q=sum[i-1].q+up[i].q-down[i].q;
    31     }
    32     if((m-sum[n-1].p*a)%sum[n-1].q==0)
    33     {
    34         y=(m-sum[n-1].p*a)/sum[n-1].q;
    35         ans=sum[x].p*a+sum[x].q*y;
    36         printf("%d
    ",ans);
    37     }
    38     else printf("No answer.
    ");
    39 
    40     return 0;
    41 }
  • 相关阅读:
    RTP/RTSP编程
    makefile
    VS 2010内存泄漏检测
    Linux Shell中捕获CTRL+C
    const
    Hdu 5344
    Hdu5762
    CF1200C
    CF1200B
    CF1200A
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/8409968.html
Copyright © 2011-2022 走看看