- %这个在我这种小白看来是只要题目不说就是完全不使用的运算,但一道题让我明白%的一个重要性
https://www.luogu.com.cn/problem/AT_abc339_b
在开始的时候我选择的做法是这样的
点击查看代码
int dir(int a)
{
if(a==-1)
{
return 3;
}
else if(a==4)
{
return 0;
}
return a;
}
int bro(int x)
{
if(x>H)
{
return x-H;
}
else if(x<1)
{
return H+x;
}
return x;
}
int bro2(int y)
{
if(y>W)
{
return y-W;
}
else if(y<1)
{
return W+y;
}
return y;
}
我是用函数进行判断这样非常麻烦的方法,接下来要说的是一个不用这样就能完成这样操作的办法。

通过这张图,我们估计什么也想不到,不就是一个0~19这有什么特别的,但我加个条件说10的后面是1,1的前面是10。
这样就和上面的题的条件有点相像了,我假设0的下标是1,9的下标是10。那相应的10的下标就对应1。
0和10是什么关系,这就回到标题上了。0%10=0,10%10=0,1%10=1,11%10=1......看对应关系就明了了。
所以上面的题我们就可以不需要靠函数进行判断,我们只要使用%就可以。给个核心代码
点击查看代码
d=(d+5)%4;
xx=(xx+dirs[d][0]+H)%H;
yy=(yy+dirs[d][1]+W)%W;
当我想通这点的时候,我忽然想起这道题跟这个思路相似
https://www.luogu.com.cn/problem/B3696
就是看在[0,2022]的相对位置
点击查看代码
((x%2023)+2023)%2023
浙公网安备 33010602011771号