• 洛谷P1011 车站


    P1011 车站

    题目描述

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

    输入输出格式

    输入格式:

    a(<=20),n(<=20),m(<=2000),和x(<=20),

    输出格式:

    从x站开出时车上的人数。

    输入输出样例

    输入样例#1:
    5 7 32 4
    
    输出样例#1:
    13
    /*
        刚开始模拟了一遍样例就在想怎么编程序来解一个方程
        发现真的不好实现 
        于是改变策略,唯一的变量y是在第二站上车的人数
        发现y越大,对应的最后一站下车人数越大,也就是满足单调性,二分答案就可以了 
    */
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int a,n,m,x,ans;
    int check(int y){
        int pre1=y,pre2=a,now=a,pos;
        for(pos=3;pos<=n-1;pos++){
            now+=pre1+pre2;
            now-=pre1;
            int s=pre1;
            pre1=pre1+pre2;pre2=s;
            if(pos==x)ans=now;
        }
        return now;
    }
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%d%d%d%d",&a,&n,&m,&x);
        int l=0,r=m,y;
        while(l<=r){
            int mid=(l+r)>>1;
            int w=check(mid);
            if(w==m)break;
            else if(w>m)r=mid-1;
            else l=mid+1;
        }
        printf("%d",ans);
    }
  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/thmyl/p/7566636.html
Copyright © 2020-2023  润新知