HDOJ 5523 Game

来源:互联网 发布:墨西哥毒贩知乎 编辑:程序博客网 时间:2024/05/20 07:59


Game

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 387    Accepted Submission(s): 150


Problem Description
XY is playing a game:there are N pillar in a row,which numbered from 1 to n.Each pillar has a jewel.Now XY is standing on the S-th pillar and the exit is in the T-th pillar.XY can leave from the exit only after they get all the jewels.Each time XY can move to adjacent pillar,or he can jump to boundary ( the first pillar or the N-th pillar) by using his superpower.However,he needs to follow a rule:if he left the pillar,he no can not get here anymore.In order to save his power,XY wants to use the minimum number of superpower to pass the game.
 

Input
There are multiple test cases, no more than 1000 cases.
For each case,the line contains three integers:N,S and T.
(1N10000,1S,TN)
 

Output
The output of each case will be a single integer on a line: the minimum number of using superpower or output -1 if he can't leave.
 

Sample Input
4 1 44 1 3
 

Sample Output
01
 

题意: 有n根柱子排成一排,起始位置是第S根柱子,出口位置是第T根柱子。要求把所有的柱子都走一遍,且走过的不能再走。走法有两种:1,走到与当前相邻的柱子上;    2,直接跳到第一根或者最后一根柱子上,并消耗能量。 
问最少消耗多少能量把柱子走完,若不能把柱子走完就输出-1

题解:很容易就知道能把柱子走完的情况下,最多消耗2个能量。  当n不等于1时,S==T时就无法从T根柱子结束(走过的柱子不能再走),所以此种情况下是不能完成的。仅有此一种情况输出-1。   其他各种情况分别讨论即可。

代码如下:

#include<cstdio>#include<cstring>int main(){int n,s,t;while(scanf("%d%d%d",&n,&s,&t)!=EOF){if(n==1){printf("0\n");continue;}if(s==t&&n!=1){printf("-1\n");continue;}if((s==1&&t==n)||(s==n&&t==1)){printf("0\n");continue;}if(s==1||s==n){printf("1\n");continue;}if(s==t+1||s==t-1){printf("1\n");continue;}printf("2\n");}return 0;}


BestCoder上的题目算法考察不多,不过挺锻炼思维能力的。以后常玩

0 0
原创粉丝点击