https://www.luogu.com.cn/problem/P1563
题目在上面(没法登QQ 不会截屏 就先这样吧)
这个题我感觉就是一个纯模拟,对小人的朝向和他所说的话进行判断,判断最后的小人是哪个
做这个题 有两个点 是我当时做的时候 踩的坑(我还是太菜了)
1.就 是千万不要把顺逆时针看反了,是逆时针。
2.就是一定要分清楚左右 把每个人的方向看清楚了,
AC代码如下
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct node{ 6 int a; 7 string nm; 8 }zy[100005];//把每个人的职业和面朝的方向放在一个结构体内 9 int main() 10 { 11 int n,m,x,y;//n,m是人数和操作数 12 cin>>n>>m; 13 for(int i=0;i<n;i++) 14 { 15 cin>>zy[i].a>>zy[i].nm; //分别输入这个人的职业和面朝方向 16 } 17 int now=0;//标记目前讨论的人 18 for(int i=1;i<=m;i++)//进行m次操作 19 { 20 cin>>x>>y; 21 if(zy[now].a==0&&x==0)now=(now+n-y)%n; 22 else if(zy[now].a==0&&x==1)now=(now+y)%n; 23 else if(zy[now].a==1&&x==0)now=(now+y)%n; 24 else if(zy[now].a==1&&x==1)now=(now+n-y)%n; 25 //对不同人的方向和左右位置进行判断 (%n防止数字大于n,转了一圈以后不清楚) 26 } 27 cout<<zy[now].nm<<endl;//输出最后的人即可 28 return 0; 29 }
代码其实并不难,自我理解一下还是可以的。
(有个小问题 就是一开始我用的万能头 但是cpp编译器一直在编译 不知道为什么,希望dalao们可以帮我解答一下 谢谢)
(感谢yjh的热情帮助!!谢谢YJH dalao)