hdu[6147] Pokémon GO II

Pokémon GO II

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 106    Accepted Submission(s): 29


Problem Description
众所周知,度度熊最近沉迷于 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
 

Source
 

Recommend
We have carefully selected several similar problems for you:   6149  6148  6147  6146  6145 
 

Statistic |  Submit |  Discuss | Note


情况1
情况2
情况2只会产生一次,之后不会再有了,这个多画几个图就能知道。
然后是可以用对4取模来找边存边。

#include<bits/stdc++.h>
using namespace std;


int main()
{
    if (fopen("in.txt", "r") != NULL)
    {
        freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
    }
    int t ;
    cin>>t;
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int x[4]={0};
        long long limit[4]={1e18,1e18,1e18,1e18};
        int ans=0;
        bool flag=false;
        for(int i=0;i<n;i++)
        {
            int xi;
            scanf("%d",&xi);
            if(ans) continue;
            if(xi>=limit[i%4]) ans=i+1;
            if(xi<=x[(i+2)%4])
            {
                if(i<4) flag=true;
                if(xi<x[(i+2)%4]-x[i%4]||flag==true)
                    limit[(i+1)%4]=x[(i+3)%4];
                else limit[(i+1)%4]=x[(i+3)%4]-x[(i+1)%4];
                flag=true;
            }
            x[i%4]=xi;
        }
        if(ans) printf("%d\n",ans);
        else puts("Catch you");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值