B. Little Artem and Grasshopper

Little Artem found a grasshopper. He brought it to his house and constructed a jumping area for him.

The area looks like a strip of cells 1 × n. Each cell contains the direction for the next jump and the length of that jump. Grasshopper starts in the first cell and follows the instructions written on the cells. Grasshopper stops immediately if it jumps out of the strip. Now Artem wants to find out if this will ever happen.

Input
The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — length of the strip.

Next line contains a string of length n which consists of characters “<” and “>” only, that provide the direction of the jump from the corresponding cell. Next line contains n integers di (1 ≤ di ≤ 109) — the length of the jump from the i-th cell.

Output
Print “INFINITE” (without quotes) if grasshopper will continue his jumps forever. Otherwise print “FINITE” (without quotes).

Examples
input
2
><
1 2
output
FINITE

input
3
>><
2 1 1
output
INFINITE

Note
In the first sample grasshopper starts from the first cell and jumps to the right on the next cell. When he is in the second cell he needs to jump two cells left so he will jump out of the strip.

Second sample grasshopper path is 1 - 3 - 2 - 3 - 2 - 3 and so on. The path is infinite.

题目比较简单,直接模拟这个过程就可以。
当遇到以前访问过的位置就说明会无限循环,跳不出来了。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int visit[100001];
int a[100001];
char str[100001];
int main()
{
    int n,t,pos=0;
    visit[pos]=1;
    scanf("%d",&n);
    scanf("%s",str);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    while(1){
        if(str[pos]=='>'){
            t=pos+a[pos];
            if(t<0||t>=n){
                printf("FINITE\n");
                break;
            }else{
                if(visit[t]==1){
                    printf("INFINITE\n");
                    break;
                }else{
                    pos=t;
                    visit[pos]=1;
                }
            }
        }else{
            t=pos-a[pos];
            if(t<0||t>=n){
                printf("FINITE\n");
                break;
            }else{
                 if(visit[t]==1){
                    printf("INFINITE\n");
                    break;
                }else{
                    pos=t;
                    visit[pos]=1;
                }
            }
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值