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. (1≤N≤10000,1≤S,T≤N)
For each case,the line contains three integers:N,S and T. (1≤N≤10000,1≤S,T≤N)
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 4 4 1 3
Sample Output
0 1
题意: 有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上的题目算法考察不多,不过挺锻炼思维能力的。以后常玩