clanmasr2's blog

By clanmasr2, history, 8 years ago, In English

Hello,

I've tried to solve Jumping in Gyms --> ACM ECPC16 but I always get WA ... it seems that my approach to solve the problem is wrong...if anyone can give me hints how it can be solved or you can give me test cases that my code fails... http://codeforces.com/gym/101147/problem/E

Here is my attempt:

#include <bits/stdc++.h>
using namespace std;
int N;
int arr[100009];
int dp[100009];
bool vis[100009];
int dfs(int ind, int steps)
{
    if(ind == N-1)
        return 0;

    int &ret = dp[ind];
    if(ret != -1)
        return ret;

    ret = 1e9;

    if(ind - arr[ind] > -1 && ind + arr[ind] < N && !vis[ind] && !vis[ind])
    {
        vis[ind] = 1;
        ret = min(ret, dfs(ind + arr[ind], steps+1)+1);
        ret = min(ret, dfs(ind - arr[ind], steps+1)+1);
        vis[ind] = 0;
    }
    else if(ind - arr[ind] > -1 && !vis[ind])
    {
        vis[ind] = 1;
        ret = min(ret, dfs(ind - arr[ind], steps+1)+1);
        vis[ind] = 0;
    }
    else if(ind + arr[ind] < N && !vis[ind])
    {
        vis[ind] = 1;
        ret = min(ret, dfs(ind + arr[ind], steps+1)+1);
        vis[ind] = 1;
    }
return ret;
}
int main()
{
    //freopen("jumping.in", "r", stdin);
    int T, x;
    cin>>T;
    while(T--)
    {
        memset(vis, 0, sizeof(vis));
        memset(dp, -1, sizeof(dp));
        cin>>N;
        for(int i=0; i<N; i++)
        {
            scanf("%d", &arr[i]);
        }
        for(int i=0; i<N; i++)
        {
            int res = dfs(i, 0);
            if(res <= 1e5)
                printf("%d\n", res);
            else
                cout<<"-1\n";
        }
    }
return 0;
}

Thanks in advance

  • Vote: I like it
  • 0
  • Vote: I do not like it