J - 新年运输 CodeForces - 500A


“直线世界”的新年正在到来!在这个世界中,有 n 个单元格,被编号为从 1n 的整数,成为一个 1 × n 的棋盘。人们生活在单元格中。然而,难以在不同单元格之间移动,因为逃离单元格具有难度。人们想与生活在其它单元格中的其他人相遇。

因此,用户 tncks0121 制作了一套在这些单元格之间移动的运输系统,来庆祝新年。首先,他考虑了 n - 1 个正整数 a1, a2, ..., an - 1 。对于每个整数 i (其中 1 ≤ i ≤ n - 1),满足条件 1 ≤ ai ≤ n - i 。其次,他制作了 n - 1 个传送门,使用从 1 到 n - 1 的整数编号。第 i (1 ≤ i ≤ n - 1) 个传送门连接了单元格 i 和单元格 (i + ai),并且一个人可以使用第 i 个传送门,从单元格 i 出发,旅行到单元格 (i + ai) 。不幸的是,一个人不能反向使用传送门,这意味着不能使用第 i 个传送门,从单元格 (i + ai) 移向单元格 i 。这是显而易见的,因为存在条件 1 ≤ ai ≤ n - i ,一个人不允许使用传送门离开“直线世界”。

当前,我站在单元格 1 处,并且我想前往单元格 t 。然而,我不知道是否可能抵达那里。请判断,通过使用已建造的运输系统,我是否能够前往单元格 t

输入

第一行包含了两个以空格分隔的整数 n (3 ≤ n ≤ 3 × 104) 和 t (2 ≤ t ≤ n) — 表示单元格的数目,以及我想要前往的目标单元格的索引。

第二行包含 n - 1 个以空格分隔的整数 a1, a2, ..., an - 1 (1 ≤ ai ≤ n - i)。数据保证:使用给定的运输系统,一个人无法离开“直线世界”。

输出

如果我能够使用此运输系统前往单元格 t ,则打印 "YES"。否则,打印 "NO"。

示例
输入
8 4
1 2 1 2 1 2 1
输出
YES
输入
8 5
1 2 1 2 1 1 1
输出
NO
备注

在第一个示例中,已访问的单元格是:1, 2, 4;因此,我们能够成功访问单元格 4

在第二个示例中,可能访问的单元格是:1, 2, 4, 6, 7, 8;因此,我们无法访问想要前往的单元格 5


#include<stdio.h>
int a[30010];
int main()
{
	int n,t,i;
	while(scanf("%d %d",&n,&t)!=EOF)
	{
		for (i=1;i<=n-1;i++)
			scanf("%d",&a[i]);
		for (i=1;i<=n-1;)
		{
			if (t==i+a[i])
			{
				printf("YES\n");
				break;
			}
			else if (t<i+a[i])
			{
				printf("NO\n");
				break;
			}
			else
				i = i + a[i];
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值