Help in solving Jumping ECPC16

Revision en1, by clanmasr2, 2016-11-10 23:53:01

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

Tags acm ecpc, jumping

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English clanmasr2 2016-11-10 23:53:01 1754 Initial revision (published)