1. 程式人生 > 其它 >【國慶の禮物 之四】洛谷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;
}