有n个人排队,每个人编号分别为1~n。现给出所有插队者的顺序和具体信息,请你在横线处填入正确的代码,输出游戏结束时从左到右每个人的名字。 输入: 共n+1行。 第一行一个整数n,表示一共需要插入的人数。 接下来的n行,每行的格式是:id name x,两两之间用空格隔开,分别表示新加入的人的编号、姓名、和插入的位置(编号为x的人右边),姓名为一个字符串。(1≤n≤10000,0<x≤n) 题目保证插入的每个人的编号都不相同,x为0时表示在最左边插入,第一次插入时x一定为0。 输出: 一行,n个字符串,两两空格隔开,表示游戏结束时,从左到右的n个人的名字。
时间: 2023-03-07 21:53:34 浏览: 205
答案:根据给出的信息,可以编写代码来输出游戏结束时从左到右每个人的名字:nameList = [] for i in range(n): # 循环输入n个人 id, name, x = input().split() # 按空格分割 nameList.insert(x, name) # 把name插入到编号x的位置 print(' '.join(nameList)) # 输出从左到右每个人的名字
相关问题
在接下来的 m 秒时,每秒都发生了一次插队行为,我们这样定义“插队”:一个人 x 离开了自己具体的位置,跑到了 y 的第后方。当然,本来在 y身后的人,这下要排在x的后面了。 巡查者记录了每一次插队的行为。 现在想知道,这个队伍最终排成了什么样的子。
为了描述这个问题,我们需要设计一个数据结构来跟踪每个人的初始位置以及每次插队事件。这里我们可以用一个双向链表(double-linked list)来表示队伍,每个节点代表一个人,包含当前位置、前一个节点和后一个节点指针。链表头节点通常表示队伍的开始。
首先,我们创建一个`Person`类,包含一个整数id和一个指向下一个`Person`的指针:
```cpp
class Person {
public:
int id;
Person* next; // 指向下一个人
};
```
然后,我们需要一个`Queue`类或结构体来存储和更新插队后的队列状态:
```cpp
class Queue {
private:
Person* head; // 队伍头部
Person* tail; // 队尾
public:
void enqueue(int id, Person* current); // 插入新成员
Person* dequeue(); // 删除并返回第一个成员
// 添加插队逻辑
void handleIntervention(int fromId, int toPosition);
};
```
在`enqueue`函数中,我们简单地将新成员添加到队尾;`dequeue`函数则从头部删除并返回当前的第一个成员。
`handleIntervention`函数处理插队事件,它接受两个参数:`fromId`是从哪个位置离开的人,`toPosition`是他想去的新位置。遍历队列找到这个人,然后调整他前后节点的指针以及受影响者的指针,确保队列顺序正确。
这里有一个简化版本的`handleIntervention`函数实现:
```cpp
void Queue::handleIntervention(int fromId, int toPosition) {
Person* target = nullptr;
for (Person* person = head; person && person->id != fromId; person = person->next) {
if (person->id == toPosition) {
target = person; // 找到目标位置的人
}
}
if (!target) {
std::cout << "Person with id " << fromId << " not found.\n";
return;
}
Person* prev = target->prev;
if (prev) {
prev->next = target->next;
} else {
head = target->next;
}
if (target->next) {
target->next->prev = prev;
} else {
tail = prev;
}
// 将 fromId 插入到 toPosition 后面
while (target->next && target->next->id < toPosition) {
target = target->next;
}
target->next->prev = target;
target->next = target->next->next;
}
```
最后,你可以根据`m`秒内的所有干预事件调用`handleIntervention`函数,然后使用`dequeue`函数查看最后的排队结果。
阅读全文