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);
        }
    }
    

  • 相关阅读:
    堆和栈的区别(转)
    conversion to dalvik format failed with error 1的解决办法
    eclipse最实用快捷键
    java socket编程(转)
    Android 面试总结
    Android横竖屏总结(转)
    Android布局文件属性笔记(转)
    常用数据结构有哪些(转)
    经常用到的Eclipse快捷键(转)
    url编码转换
  • 原文地址:https://www.cnblogs.com/wlxtuacm/p/5712284.html
Copyright © 2011-2022 走看看