专栏文章
题解:AT_gw2015_b アリ巣
AT_gw2015_b题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqnesg0
- 此快照首次捕获于
- 2025/12/04 07:38 3 个月前
- 此快照最后确认于
- 2025/12/04 07:38 3 个月前
AT_gw2015_bアリ巣 题解
题目翻译:在一个无限大小网格上有一只蚂蚁,蚂蚁从给定了一个网格上有一只蚂蚁,蚂蚁从网格的原点 位置出发,按照特定的规则行走。网格的每个位置可以用二进制的状态表示: 表示白色, 表示黑色。蚂蚁重复 次以下操作:
-
如果当前位置是 ,则右转 度,当前位置变成 。
-
如果当前位置是 ,则左转 度,当前位置变成 。
进行完以上操作后,蚂蚁会先前走一步,求蚂蚁走完 步后当前位置的值。
思路:直接模拟,用
CPPwhile 模拟每一步的过程,具体模拟过程代码里已经很清晰了,但还是提醒 小等于 的 次方,要开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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...