5 solutions

  • 1
    @ 2026-2-11 10:49:09
    #include<bits/stdc++.h>
    using namespace std;
    const int N=210;
    int dist[N];
    int dx[N];
    int dy[]={-1,1};
    int n,A,B;
    int bfs(int x)
    {
    	memset(dist,0x3f,sizeof dist);
    	dist[x]=0;
    	queue<int> q;
    	q.push(x);
    	while(q.size())
    	{
    		int t=q.front();
    		q.pop();
    		if(t==B)
    		{
    			return dist[B];
    		}
    		for(int i=0;i<2;i++)
    		{
    			int a=t+dx[t]*dy[i];
    			if(a<0||a>n)
    			{
    				continue;
    			}
    			if(dist[a]!=0x3f3f3f3f)
    			{
    				continue;
    			}
    			dist[a]=dist[t]+1;
    			q.push(a);
    		}
    	}
    	return -1;
    }
    int main()
    {
    	cin>>n>>A>>B;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>dx[i];
    	}
    	cout<<bfs(A);
    	return 0;
    }
    
    • 1
      @ 2025-5-10 9:24:26
      #include<bits/stdc++.h>
      using namespace std;
      const int N=210;
      int dist[N];
      int dx[N];
      int dy[]={-1,1};
      int n,A,B;
      int bfs(int x)
      {
         memset(dist,0x3f,sizeof dist);
         dist[x]=0;
         queue<int> q;
         q.push(x);
         while(q.size())
         {
            int t=q.front();
            q.pop();
            if(t==B)
            {
               return dist[B];
            }
            for(int i=0;i<2;i++)
            {
               int a=t+dx[t]*dy[i];
               if(a<0||a>n)
               {
                  continue;
               }
               if(dist[a]!=0x3f3f3f3f)
               {
                  continue;
               }
               dist[a]=dist[t]+1;
               q.push(a);
            }
         }
         return -1;
      }
      int main()
      {
         cin>>n>>A>>B;
         for(int i=1;i<=n;i++)
         {
            cin>>dx[i];
         }
         cout<<bfs(A);
         return 0;
      }
      
      
      • 0
        @ 2024-7-13 14:02:18
        #include<bits/stdc++.h>
        using namespace std;
        const int N=210;
        int dist[N];
        int dx[N];
        int dy[]={-1,1};
        int n,A,B;
        int bfs(int x)
        {
           memset(dist,0x3f,sizeof dist);
           dist[x]=0;
           queue<int> q;
           q.push(x);
           while(q.size())
           {
              int t=q.front();
              q.pop();
              if(t==B)
              {
                 return dist[B];
              }
              for(int i=0;i<2;i++)
              {
                 int a=t+dx[t]*dy[i];
                 if(a<0||a>n)
                 {
                    continue;
                 }
                 if(dist[a]!=0x3f3f3f3f)
                 {
                    continue;
                 }
                 dist[a]=dist[t]+1;
                 q.push(a);
              }
           }
           return -1;
        }
        int main()
        {
           cin>>n>>A>>B;
           for(int i=1;i<=n;i++)
           {
              cin>>dx[i];
           }
           cout<<bfs(A);
           return 0;
        }
        
        • -2
          @ 2025-1-18 16:17:31
          #include<bits/stdc++.h>
          using namespace std;
          const int N=210;
          int dist[N];
          int dx[N];
          int dy[N];
          int n,A,B;
          int bfs(int x)
          {
          	list<int> q;
          	q.push_back(x);
          	dist[q]=0;
          	while(dist.size())
          	{
          		int t=dy.front();
          		dy.pop();
          		if(q==A)
          		{
          			return dist[B];
          		}
          		for(int i=0;i<2;i++)
          		{
          			int a=t+dx[t]*dy[i];
          			if(a<0||a>n) break;
          			if(dist[a]!=0x3f3f3f) break;
          			dy[a]=dy[t]+1;
          			q.push(dx[i]);
          		}
          	}
          	return -1;
          }
          int main()
          {
          	cin>>n>>A>>B;
          	for(int i=1;i<=n;i++)
          	{
          		cin>>dy[i];
          	}
          	cout<<bfs(n);
              return 0;
          }
          
          • -4
            @ 2024-12-3 19:20:04
            #include<bits/stdc++.h>
            using namespace std;
            const int N=210;
            int dist[N];
            int dx[N];
            int dy[]={-1,1};
            int n,A,B;
            int bfs(int x)
            {
               memset(dist,0x3f,sizeof dist);
               dist[x]=0;
               queue<int> q;
               q.push(x);
               while(q.size())
               {
                  int t=q.front();
                  q.pop();
                  if(t==B)
                  {
                     return dist[B];
                  }
                  for(int i=0;i<2;i++)
                  {
                     int a=t+dx[t]*dy[i];
                     if(a<0||a>n)
                     {
                        continue;
                     }
                     if(dist[a]!=0x3f3f3f3f)
                     {
                        continue;
                     }
                     dist[a]=dist[t]+1;
                     q.push(a);
                  }
               }
               return -1;
            }
            int main()
            {
               cin>>n>>A>>B;
               for(int i=1;i<=n;i++)
               {
                  cin>>dx[i];
               }
               cout<<bfs(A);
               return 0;
            }
            
            
            • 1

            Information

            ID
            221
            Time
            1000ms
            Memory
            256MiB
            Difficulty
            3
            Tags
            # Submissions
            82
            Accepted
            18
            Uploaded By