zoukankan      html  css  js  c++  java
  • 湖科大校赛第三题

    题目描述

     小兔位于X轴的x点,欲跳至X轴的y点。x,y均为整数。小兔每次沿x轴直线跳跃,每跳的长度均为正整数,假设

    小兔一共跳了n次才到目的地,每次跳的长度为F1,F2,..., Fn. 有规则如下:
    F1=Fn=1
    |Fi-Fi-1|<=1   , 2<=i<=n         (注:| |是绝对值符号)

    我们的问题是给定x,y, 如何使得n最小。

    输入

     包含多组数据,但不超过1000组。每组数据一行,每行包括两个整数x和y。0 <= x < y <= 1000000000 。

    输出

     对于每一组数据,输出一行,即从x到y的最小跳跃次数n。

    样例输入

    45 4845 4945 50

    样例输出

    334
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    int a[100010];
    const int inf=1000000000;
    int main()
    {
        int res=0;
        a[1]=1;
        for(int i=2;; i++)
        {
            a[i]=a[i-1]+2*i-1;//算最大峰且元素不重复的和,后一个比前一个多一个i多一个i-1
            //cout<<a[i]<<endl;
            if(a[i]>=inf)break;
        }
        int j;
        int s,t;
        while(scanf("%d%d",&s,&t)!=EOF)
        {
            int tmp=t-s;
            for(j=1;; j++)
            {
                if(a[j]>tmp&&a[j-1]<=tmp)break;
            }
            j--;//找出最大峰
            tmp-=a[j];
            res=2*j-1;
            if(tmp==0)res=res;
            else if(tmp<=j)res++;//这样可以在tmp出多用一次
            else res+=2;//否则只能加二,当然不可能加三,否则肯定多余两倍最大值,这是最大峰肯定会改变
            printf("%d
    ",res);
        }
    }
    

  • 相关阅读:
    QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)
    就异地协作办公来说, 360的体验完爆他们——360书生企业云盘 来了
    MVC 4
    Mvc的多层架构
    代码生成器
    js理解
    我(webabcd)的文章索引
    多个视图结果显示于一个共用预览视图内
    .NET源码
    Using Ninject in a Web Application
  • 原文地址:https://www.cnblogs.com/wlxtuacm/p/5712284.html
Copyright © 2011-2022 走看看