链接: https://www.nowcoder.com/acm/contest/114/A
来源:牛客网

题目描述

在平面上有n*n大小的正方形,定义正方形左下角坐标是(1,1),右下角坐标是(n,1)

现在A君在左下角,他的初始方向是向右,他要在正方形内走m步

当A君碰到边界或者已经走过的格子时,他便会逆时针转90°继续走,直到走完m步。
现在给你两个整数n和m,请算出走完m步后A君的坐标。

输入描述:

输入一行两个整数n和m。

输出描述:

输出一行两个数表示A君的坐标。
示例1

输入

复制
3 3

输出

复制
3 2

备注:

n<=1000,m<n*n

这个题之前在新生的时候做过,但是是非常麻烦的模拟,现在又看到了这种题,记录一下,用数组代替方向;

ac:

#include<stdio.h>
#include<string.h>  
#include<math.h>  
  
//#include<map>   
//#include<set>
#include<deque>  
#include<queue>  
#include<stack>  
#include<string>  
#include<iostream>  
#include<algorithm>  
using namespace std;  
  
#define ll long long  
#define da    0x3f3f3f3f  
#define clean(a,b) memset(a,b,sizeof(a))// 水印 

int fx[4]={1,0,-1,0},fy[4]={0,1,0,-1};
bool biaoji[1010][1010];

int main()
{
	clean(biaoji,0);
	int n,m;
	cin>>n>>m;
	int i=1,j=1,f=0;
	biaoji[i][j]=1;
	while(m)
	{
		m--;
		i=i+fx[f];
		j=j+fy[f];
		if(i==n+1||j==n+1||i==0||biaoji[i][j])
		{
			i=i-fx[f];
			j=j-fy[f];
			f++;
			f=f%4;
			i=i+fx[f];
			j=j+fy[f];
		}
		biaoji[i][j]=1;
	}
	cout<<i<<" "<<j<<endl;
}