题解:AT_gw2015_b アリ巣
AT_gw2015_bアリ巣 题解
题目翻译:在一个无限大小网格上有一只蚂蚁,蚂蚁从给定了一个网格上有一只蚂蚁,蚂蚁从网格的原点
-
如果当前位置是
0 ,则右转90 度,当前位置变成1 。 -
如果当前位置是
1 ,则左转90 度,当前位置变成0 。
进行完以上操作后,蚂蚁会先前走一步,求蚂蚁走完
思路:直接模拟,用 while 模拟每一步的过程,具体模拟过程代码里已经很清晰了,但还是提醒 long long,初始方向
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;
//n表示操作次数
cin>>n;
long long a[4]={0,1,0,-1},b[4]={1,0,-1,0},x=1000,y=1000,t=0,m[2005][2005];
//a和b用来表示方向
//x,y为坐标
//t维护方向
//m存储网格
if(n>=10000) n=10000+(n-10000)%104;
while(n--){//执行N次,代表操作次数
if(m[x][y]==0) t=(t+1)%4;//当所处为白色时,右转。
else{//当所处为黑色时;
if(t==0) t=4;//当他是0时无法左转(-1),所以要特判
t=(t-1)%4; //左转
}
m[x][y]=!m[x][y];//翻转数字
x+=b[t];//向前走
y+=a[t];//往前一步
}
cout<<m[x][y]<<endl;//输出结果
return 0;
}