两天了,大佬们捞一下吧求求了
查看原帖
两天了,大佬们捞一下吧求求了
1163062
whatsupman楼主2023/11/15 04:29
#include <stdio.h>
#include<math.h>
int m[300] = { 0 }, n, a, b, k1=0;
int stack[10000000] = { 0 };
long long k2 = 0;
int main()
{
	int i, j;
	scanf("%d %d %d", &n, &a, &b);
	for (i = 0; i < n; i++)
	{
		scanf("%d", &m[i + 1]);
	}
	int top = 0;
	stack[top] = a;
	if (a==b)
	{
		printf("0");
	}
	else
	{
		while (stack[top]!=b)
		{
			long long k3 = k2;
			int flag1 = 0,flag2=0;
			k2 = k2+pow(2, k1);
			for ( i = k3; i < k2; i++)
			{
				if (stack[i]!=-1)
				{
					flag1 = 1;
					stack[2 * i + 1] = stack[i] - m[stack[i]];
					stack[2 * i + 2] = stack[i] + m[stack[i]];
					if (stack[2*i+1]>n || stack[2*i+1]<1)
					{
						stack[2 * i + 1] = -1;
					}
					else if (stack[2*i+1]==b)
					{
						flag2 = 1;
						break;
					}
					if (stack[2 * i + 2] > n || stack[2 * i + 2] < 1)
					{
						stack[2 * i + 2] = -1;
					}
					else if (stack[2 * i + 2] == b)
					{
						flag2 = 1;
						break;
					}
				}
				else if (stack[i]==-1)
				{
					stack[2 * i + 1] = -1;
					stack[2 * i + 2] = -1;
				}
			}
			if (flag2==1)
			{
				break;
			}
			else
			{
				if (flag1==0)
				{
					k1 = -2;
					break;
				}
				k1++;
			}
		}
		printf("%d", k1 + 1);
	}
}
2023/11/15 04:29
加载中...