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

    2287 火车站

     

     时间限制: 1 s
     空间限制: 32000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 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

    分类标签 Tags 点此展开 

     
     
    题意:第二站上下车人数未知,是否有情况满足第n站的总人数恰好为m,如果是,输出x站的车上总人数;否则,输出“No answer.”。
    ps:第n站的总人数==第n-1站的总人数 且 第n站的上车人数为0;
    评析:很好的Fibonacci数列的变形
    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define N 1001
    int a,n,m,x,up[N],f[N];
    int main(){
        cin>>a>>n>>m>>x;
        for(int j=0;j<=200000;j++){//从0开始枚举第2站上车的人数 
            up[1]=a;
            up[2]=j;
            f[1]=f[2]=a;
            for(int i=3;i<n;i++){
                up[i]=up[i-1]+up[i-2];//上车人数满足斐波那契数列的性质 
                f[i]=f[i-1]+up[i-2];//下车人数等于上一站上车人数,即up[i-2]为第i站上车人数 - 下车人数 
            }
            if(f[n-1]==m){
                cout<<f[x]<<endl;
                return 0;
            }
        }
        puts("No answer.");
        return 0;
    }
     
  • 相关阅读:
    手脱ASPack v2.12变形壳2
    手脱nSPack 2.1
    WCF分布式开发步步为赢(1):WCF分布式框架基础概念
    一个经典例子让你彻彻底底理解java回调机制
    C#三层架构详细解剖
    eclipse快捷键及各种设置
    设计模式总结
    程序猿也爱学英语(上)
    关于PDA、GPS等动态资源的几种GIS解决方案
    通过VS2010性能分析来查找代码中那些地方最损耗资源
  • 原文地址:https://www.cnblogs.com/shenben/p/5642784.html
Copyright © 2011-2022 走看看