求优化!!

Ryan123  •  2年前


#include <bits/stdc++.h>
using namespace std;
//TLE
int x,y,nx=1,ny=1,k=0,num=0;
int dirx[5]= {0,1,2,2,1};
int diry[5]= {0,-2,-1,1,2};
int step[10000];
int main()
{
  cin>>x>>y;
  while(1)
  {
    if((x-nx)>2*(y-ny))
    {
      cout<<-1<<'\n';
      return 0;
    }
    if(nx==x && ny==y)
      break;
    k++;
    if((x-nx)>2*(y-ny))
    {
      k=step[num];
      num--;
      nx-=dirx[k];
      ny-=diry[k];
    }
    else if(k>4)
    {
      k=step[num];
      num--;
      nx-=dirx[k];
      ny-=diry[k];
    }
    else
    {
      nx+=dirx[k];
      ny+=diry[k];
      if(nx>x || ny>y || ny<1 || nx<1)
      {
        nx-=dirx[k];
        ny-=diry[k];
      }
      else if(x-nx>2*(y-ny))
      {
        nx-=dirx[k];
        ny-=diry[k];
      }
      else
      {
        num++;
        step[num]=k;
        k=0;
      }
    }
  }
  for(int i=1; i<=num; i++)
    cout<<step[i]<<' ';
  cout<<'\n';
  return 0;
}

评论: