zoukankan      html  css  js  c++  java
  • codeforces 669B B. Little Artem and Grasshopper(水题)

    题目链接:

    B. Little Artem and Grasshopper

    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output
     

    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

    题意:

    给每个格子的跳动方向和跳动的距离,问从第一个格子开始跳,是永远在这些格子里还是会跳出去;

    思路:

    模拟跳动,跳出去了就输出跳出去了,没跳出去当跳到原来跳过的格子上就会永远跳不出去;

    AC代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll mod=1e9+7;
    const ll inf=1e15;
    const int N=1e5+6;
    int n,a[N],vis[N];
    char s[N];
    int main()
    {
        memset(vis,0,sizeof(vis));
        scanf("%d",&n);
        scanf("%s",s+1);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        int pos=1;
        vis[1]=1;
        while(1)
        {
            if(s[pos]=='>')
            {
                if(pos+a[pos]>n)
                {
                    printf("FINITE
    ");
                    return 0;
                }
                else
                {
                    if(vis[pos+a[pos]])
                    {
                        printf("INFINITE
    ");
                        return 0;
                    }
                    else
                    {
                        pos+=a[pos];
                        vis[pos]=1;
                    }
                }
            }
            else
            {
    
                if(pos-a[pos]<1)
                {
                    printf("FINITE
    ");
                    return 0;
                }
                else
                {
                    if(vis[pos-a[pos]])
                    {
                        printf("INFINITE
    ");
                        return 0;
                    }
                    else
                    {
                        pos-=a[pos];
                        vis[pos]=1;
                    }
                }
    
            }
        }
    
        return 0;
    }
  • 相关阅读:
    adb常用命令和工具
    playwright学习记录
    vue,element-ui表格,多个单元格值可修改(点击聚焦后变成input,失去焦点请求保存)
    vue,element-ui表格,合并单元格,如果需要合并的数据隔行,需要重新排列数组
    cas-5.3.x接入REST登录认证,移动端登录解决方案
    企业级cas5.3登录页面修改
    cas实现单点登录mysql,oracle双版本
    Mycat实现MySQL主从复制和读写分离(双主双从)
    IDEA安装插件后默认存放的位置
    值得推荐的Idea十几大优秀插件
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5430627.html
Copyright © 2011-2022 走看看