#include #include using namespace std; struct point_struct{int x,y;}hole[55],CurrPos,NewPos; long long p[150000],Score,Value; mapCleanFields; int n,k,s,w,z,PocX,PocY,d; int Dx[4]={0,-1,0,1}; int Dy[4]={-1,0,1,0}; char Dir_CharRow[4]={'L','U','R','D'}; char Dir_Char; int SqrtS,Delta; void Unos(); int D(point_struct P){ long long MinDist=2e9; for(int i=1;i<=k;i++){ int MinDist=2e9; for(int i=1;i<=k;i++){ MinDist=min(MinDist,(int)sqrt((hole[i].x-P.x)*(hole[i].x-P.x)+(hole[i].y-P.y)*(hole[i].y-P.y))); } return MinDist; } return MinDist; } void CalculateHolePos(){ /// cout<<"Nove rupe su:"; for(int i=1;i<=k;i++){ hole[i].x=(hole[i].x*w+z)%n+1; hole[i].y=(hole[i].y*z+w)%n+1; /// printf("(%d,%d)",hole[i].x,hole[i].y); } /// cout<FindBestDirection(point_struct par_point){ int RET_value=-2e9; point_struct curr_point,RET_point; char RET_dir_char; for(int i=0;i<4;i++){ curr_point=par_point; curr_point.x+=Dx[i]; curr_point.y+=Dy[i]; if(curr_point.x<1 or curr_point.x>n or curr_point.y<1 or curr_point.y>n)continue; else if(CleanFields.find(curr_point.x*10000000+curr_point.y)!=CleanFields.end()){ if(RET_value<0){ RET_value=0; RET_dir_char=Dir_CharRow[i]; RET_point=curr_point; } } else if(RET_value>n>>k>>s>>w>>z>>PocX>>PocY; CurrPos.x=PocX; CurrPos.y=PocY; int Lim=(n-1)*sqrt(2)+1; for(int i=0;i