题目链接:玩具谜题
重点知识点:
1.
一个长度为n的数组,现在我的下标是k,请问我向左移动m个单位后我的下标是多少?(数组可以循环,下标0往左移动一位之后下标就变成n-1)
公式:
(k + n - m) % n;
- 一个长度为n的数组,现在我的下标是k,请问我向右移动m个单位后我的下标是多少?
公式:
(k + m) % n;
AC代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 100010;
typedef pair<int, string> PII;
PII a[N];
int n, m, sz;
int main()
{
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
{
int dir;
string name;
cin >> dir >> name;
a[i].first = dir, a[i].second = name;
sz++;
}
int curpos = 0;
while (m--)
{
int dir, cnt;
cin >> dir >> cnt;
PII cur = a[curpos];
int curdir = cur.first;string curname = cur.second;
if (curdir == 0 && dir == 0) curpos = (curpos + n - cnt) % n;
else if (curdir == 0 && dir == 1) curpos = (curpos + cnt) % n;
else if (curdir == 1 && dir == 0) curpos = (curpos + cnt) % n;
else if (curdir == 1 && dir == 1) curpos = (curpos + n - cnt) % n;
}
cout << a[curpos].second;
}