本萌新看到这个题目,想到了乘法法则,题目中左右方向要判断两次,很耗脑力,和乘法中的正负号判断非常像。

抽象一点:这个人向内向外就是乘法中括号外的正负号,他的左右方向是括号内的正负号,所以我们以singer为标准,每个人的 0 (朝内)为 1 ,每个人的 1 (朝外)为 -1 。

而他们的左右方向,因为题目图中是逆时针走向,所以和他们的朝内朝外是相反的,故判断每个人左右方向时, 0 为 -1 , 1 为 1 。

最后将两个判断方向的数乘起来(这事当然交给电脑了),就是最终方向。代码如下:

#include<iostream>
using namespace std;
int n,m,a,b,i,num[100001];
string name[100001];//准备工作 
int main(){
	cin>>n>>m;
	for(i=1;i<=n;i++){
		cin>>num[i]>>name[i];//输入 
		if(num[i]==0)num[i]=1;
		else num[i]=-1;//以singer朝向为准,0为1,1为-1; 
	}
	i=1;//从第一个开始循环 
	while(m){
		cin>>a>>b;
		if(a==0)a=-1;//题目的图中为逆时针,故 1为1,0为-1; 
		i+=num[i]*a*b;//乘法法则,把方向判断扔给电脑去算; 
		if(i<1)i=n+i;//边界情况
		if(i>n)i%=n;//把他们围成一个圈 
		m--;
	}
	cout<<name[i];//输出,圆满 
    return 0;
}

相关文章:

  • 2021-10-04
  • 2021-10-26
  • 2021-08-19
  • 2022-01-18
  • 2022-02-16
  • 2022-12-23
  • 2022-01-19
猜你喜欢
  • 2021-11-24
  • 2021-07-08
  • 2022-02-11
  • 2021-08-06
  • 2021-08-12
  • 2021-12-23
  • 2021-10-24
相关资源
相似解决方案