P1563 [NOIP2016 提高组] 玩具谜题
1.题目介绍
2.题解
2.1 模拟
思路
有一个大坑,题目给你的小人顺序是按逆时针给的,不是顺时针!!!跟顺时针相比掉一下顺序就行。
看似一共有四种情况:[0,0],[0,1],[1,0],[1,1], 其实可以简化分为两种情况,因为[0,0]和[1,1]都代表你要顺时针数,[1,0],[0,1]都代表你要逆时针数。
这里还要考虑他是一个环形的情况,(这里给的小人是逆时针给的,所以实际是相反过来,以下思路给的是顺时针去看的时候)
当顺时针转的时候,如果超出了总人数n,可以使用求余的方式 (curr + num)% n即可
当逆时针转的时候, 如果出现了负数,可以采用减法中借位的思路,跟上一级借一个n过来即可,(curr + )
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
pair<int, string> memPair[n];
for(int i = 0; i < n; i++){
int dir;
string job;
cin >> dir >> job;
memPair[i] = make_pair(dir, job);
}
int curr = 0;
for(int j = 0; j < m; j++){
int lOrR, num;
cin >> lOrR >> num;
if(memPair[curr].first == lOrR){
curr = (curr - num + n) % n;
}
else {
curr = (curr + num) % n;
}
}
cout << memPair[curr].second;
}

浙公网安备 33010602011771号