BestCoder61(div.2)1002---hdoj 5523 Game

题目链接hdoj5523



一、题目分析


  有n根柱子,编号为s的柱子是入口,编号为t的柱子是出口,玩家每次移动可以是走到相邻的柱子,也可以使用超能力移动到第1根柱子或者第n根柱子(始末两根柱子不相邻),要求必须经过每一根柱子才能从出口出来,并且每根柱子只能经过一次。

  一个测试案例,包含三个输入的数字n、s、t(1≤N≤10000,1≤S,T≤N),要求输出超能力的最小消耗,若无法走出则输出-1。

  由题意可知,最后的输出结果只能是这几种可能:-1,0,1,2。下面依次分析这几种可能:如果n==1时输出0;否则,如果s==t时输出-1;否则,如果(s==1&&t==n)或者(s==n&&t==1)时输出0;否则,如果s==1或者s==n或者abs(s-t)==1时输出1;否则输出2。



二、AC代码


#include<iostream>
#include<cstring>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
using namespace std;
int main(){
    int n,s,t;
    while(~scanf("%d%d%d",&n,&s,&t)){
        if(n==1)
            printf("0\n");
        else if(s==t)
            printf("-1\n");
        else if( (s==1&&t==n) || (s==n&&t==1) )
            printf("0\n");
        else if( s==1 || s==n || abs(s-t)==1)
            printf("1\n");
        else
            printf("2\n");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值