众所周知,度度熊最近沉迷于 Pokémon GO。
由于太过沉迷,现在它只能按照游戏内置的指令行走了:对,简直就像一个现实中的Pokémon!
游戏内置的指令实际上可以抽象成一种:保持现在的朝向前行X米,然后右转。度度熊相信,只要遵循这个指令,它就一定可以抓到最珍奇的精灵球。
但不幸的是,这个指令并不是很有可信度,有时会引导度度熊走回原来的位置。现在它想知道,在第几条指令时它第一次回到已经走过的位置?如果这种情况没有发生,请输出 “Catch you”。

由于太过沉迷,现在它只能按照游戏内置的指令行走了:对,简直就像一个现实中的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
每组数据的第一行包含一个数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”。
如果这种情况没有发生,请输出 “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 you5
模拟判断情况
三种情况:
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); } }