hdu6147 模拟

众所周知,度度熊最近沉迷于 Pokémon GO。




由于太过沉迷,现在它只能按照游戏内置的指令行走了:对,简直就像一个现实中的Pokémon!

游戏内置的指令实际上可以抽象成一种:保持现在的朝向前行X米,然后右转。度度熊相信,只要遵循这个指令,它就一定可以抓到最珍奇的精灵球。

但不幸的是,这个指令并不是很有可信度,有时会引导度度熊走回原来的位置。现在它想知道,在第几条指令时它第一次回到已经走过的位置?如果这种情况没有发生,请输出 “Catch you”。
 

Input
第一行为T,表示输入数据组数。

每组数据的第一行包含一个数N,表示指令长度。接着的一行包含N个数字Xi,表示第i个指令中前行的距离。

● 1≤T≤100

● 1≤N≤1 000 000

● 1≤Xi≤1 000 000 000
 

Output
对每组数据输出第一次回到已经走过的位置时的指令下标i (1≤i≤N)。

如果这种情况没有发生,请输出 “Catch you”。
 

Sample Input
  
  
3 4 2 2 2 2 4 2 1 3 1 5 2 1 3 1 3
 

Sample Output
  
  
4 Catch you

5

模拟判断情况

三种情况:

if (a[j]>=a[j-2]&&a[j-1]<=a[j-3])  { bj=j; break; } if ((a[j]+a[j-4])>=a[j-2]&&a[j-1]==a[j-3]) { bj=j; break; } if (j>=6) if ((a[j]+a[j-4])>=a[j-2]&&(a[j-1]+a[j-5])>=a[j-3]&&a[j-3]>=a[j-1]&&a[j-2]>=a[j-4]) { bj=j; break; }

#include<cstdio>
#include<algorithm>
#include<cstring>
int t,n,a[1000001];
int main()
{
	scanf("%d",&t);
	for (int i=1;i<=t;i++)
	{
		scanf("%d",&n);
		memset(a,0,sizeof(a));
		for (int j=1;j<=n;j++)
			scanf("%d",&a[j]);
		int bj=0;
		if (n<=3) {printf("Catch you\n");continue;}
		else
		{
			for (int j=4;j<=n;j++)
			{
				if (a[j]>=a[j-2]&&a[j-1]<=a[j-3]) 
				{
					bj=j;
					break;
				}
				if ((a[j]+a[j-4])>=a[j-2]&&a[j-1]==a[j-3])
				{
					bj=j;
					break;
				}
				if (j>=6)
					if ((a[j]+a[j-4])>=a[j-2]&&(a[j-1]+a[j-5])>=a[j-3]&&a[j-3]>=a[j-1]&&a[j-2]>=a[j-4])
					{
						bj=j;
						break;
					}
			}
		}
		if (bj==0) printf("Catch you\n");
		else printf("%d\n",bj);
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值