zoukankan      html  css  js  c++  java
  • UVa10120 Gift?!

    题目大意

    美丽的村庄里有一条河,N个石头被放置在一条直线上,从左岸到右岸编号依次为1,2,...N。两个相邻的石头之间恰好是一米,左岸到第一个石头的距离也是一米,第N个石头到右岸同样是一米。礼物被放置在第M个石头上,Frank从左岸开始跳跃,对于第i步,必须跳2*i-1米,每次可以向左方向跳,也可以向右方向跳,跳到河岸跳跃就结束了,问Frank能否拿到礼物。

    题解

    每次跳跃有两种选择,向右或者向左,用搜索非常的好实现,只是2<=N<=10^6必须得跪。。。实在想不出怎么优化。。。看了下网上的题解,当N>=49一定能跳跃到M的位置上,直接输答案即可。。。即N<49用搜索,N>=49直接输答案。。。至于为什么N>=49就一定能跳跃M位置,algorithmist给出了详细的证明。

    #include <iostream>
    #include<cstdio>
    using namespace std;
    long m,n,flag;
    void dfs(long ans, long step)
    {
        if(ans>n||ans<1) return;
        if(ans==m)
        {
            flag=1;
            return;
        }
        dfs(ans+2*step+1,step+1);
        dfs(ans-2*step-1,step+1);
    }
    int main(void)
    {
        while(scanf("%ld%ld",&n,&m)==2,n+m)
        {
            if(n>=49) printf("Let me try!\n");
            else
            {
            flag=0;
            dfs(1,1);
            if(flag) printf("Let me try!\n");
            else
            printf("Don't make fun of me!\n");
            }
        }
    return 0;
    }
  • 相关阅读:
    KVM 重命名虚机
    甲醛了解
    递归函数,匿名函数
    函数
    zabbix监控URL
    zabbix自动发现
    vim常用命令总结
    saltstack常用命令
    zabbix监控Apache
    nginx配置详解
  • 原文地址:https://www.cnblogs.com/zjbztianya/p/3019693.html
Copyright © 2011-2022 走看看