天天看點

【國慶の禮物 之四】洛谷P1563 玩具謎題

題目:

【國慶の禮物 之四】洛谷P1563 玩具謎題
【國慶の禮物 之四】洛谷P1563 玩具謎題

思路:

模拟計算。我們使用pos變量記錄我們走到了哪裡。

我們發現,如果朝向和圈内/圈外相同,那麼結果是左數。否則,結果是右數。兩個條件相同/不同,可以使用異或運算符。

順/逆時針可以使用下面的代碼,注意取模計算。

pos=(pos+s)%n;
pos=(pos+n-s)%n;
           

需要注意,圓圈問題中數組最好用0開始計數,避免某些問題。

完整代碼如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m;//人數,指令數 
string job[N];
int face[N];//朝向 

//0表示圈内 1表示圈外
//0表示左數 1表示右數 
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>face[i]>>job[i];
	}
	int pos=0;
	for(int i=0;i<m;i++){
		int a,s;
		cin>>a>>s; //a:左右 s:數字
		if(face[pos]^a){//順時針 
			pos=(pos+s)%n;
		} 
		else{//逆時針 
			pos=(pos+n-s)%n;
		}
	}
	cout<<job[pos]<<endl;
	return 0;
}