链接: 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君的坐标。
备注:
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;
}