【國慶の禮物 之四】洛谷P1563 玩具謎題
阿新 • • 發佈:2021-10-03
題目:
思路:
模擬計算。我們使用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; }