P1563玩具谜题
思路:
用结构体存小人的朝向和姓名
a = 1左数 a=0 右数
b = 0朝内 b=1 朝外
无论 左数 右数 朝里 朝外 只有两种情况 顺时针 和 逆时针
顺时针:左数且朝内 或 右数且朝外 => 10 或 01 => a^b ==1
逆时针:左数且朝外 或 右数且朝内 => 11 或 00 => a&b==1
顺时针和逆时针怎么移动?
顺时钟移动k步: i = (i+k)%n;
逆时针移动k步:i = (i+n-k)%n;
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int n,m,s,b;
struct node{
int a;
string name;
};
node r[100005];
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>r[i].a>>r[i].name; //输入朝向和姓名
int now=0; //标记当前位置
for(int i=0;i<m;i++){
cin>>b>>s; //输入左移还是右移 并移动s位
if(r[now].a^b==1){ //顺时针
now=(now+s)%n;
}
else{//逆时针
now=(now+n-s)%n;
}
}
cout<<r[now].name<<endl;
return 0;
}