题目描述
mmm个小人围成了一个圈,每个小人有朝里朝外两个方向(所以左右不相同),从读到的第一个小人开始执行类似 “往左/右xxx个人” 这样的指令,xxx保证不超过一圈,输出最后停下的位置
解答思路
- 用双向循环链表模拟这个圈,会超时
- 用数组取模,为便于书写可以把往左数和往右数统一,左数xxx个小人等价于右数m−xm-xm−x个小人
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
class Role{
public:
string name;
int dir;
Role() {}
Role(string n, int d):
name(n),
dir(d)
{}
};
int main(){
int m, n;
cin >> m >> n;
vector<Role> roles(m);
for (int i = 0; i < m; ++i){
cin >> roles[i].dir >> roles[i].name;
}
int index = 0;
while (n--){
int d, count;
cin >> d >> count;
if (!(d ^ roles[index].dir)) count = m - count;
index = (index + count) % m;
}
cout << roles[index].name << endl;
}
文章描述了一个编程问题,涉及使用双向循环链表来模拟m个小人在环形上执行指令,最终确定停止位置。通过控制移动方向和计数,确保不超过一圈并输出最终位置。
135





