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)

posted on 2020-05-12 17:00  月下诺  阅读(217)  评论(0编辑  收藏  举报

Live2D