ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

P1563 玩具谜题

2026/8/18 0:54:57 拓冰建站 浏览量
P1563 玩具谜题

image
image

思路:

方向数组:(保存下一个位置的加减性)

nxt[cur.ori][ai]
朝内 向左(沿坐标减小的方向走)
nxt[0][0] = -1
朝内 向右(沿坐标增大的方向走)
nxt[0][1] = 1
朝外 向左
nxt[1][0] = 1
朝外 向右
nxt[1][1] = -1

1~m映射到0~m-1,以便于取模

运算结果为负时,取模方法:(a%m+m)%m

核心语句:

cur=((cur+nxt[p[cur].ori][a[i]]*s[i])%n+n)%n

拆解为:

cur=((x)%n+n)%n

x=cur+nxt[...][...]*s[i]

当前所在位置:cur

第一个下标:p[cur].ori

第二个下标:a[i]

移动的步数:s[i]

#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
int n,m,cur,a[MAXN],s[MAXN],nxt[2][2]={{-1,1},{1,-1}};
struct node{int ori;//orientationstring opy;//occupy
}p[MAXN];int main()
{ios_base::sync_with_stdio(0),cin.tie(0);cin>>n>>m;for(int i=0;i<n;++i){cin>>p[i].ori>>p[i].opy;}for(int i=0;i<m;++i){cin>>a[i]>>s[i];}cur=0;//current indexfor(int i=0;i<m;++i){cur=((cur+nxt[p[cur].ori][a[i]]*s[i])%n+n)%n;}cout<<p[cur].opy;return 0;
}