学生排队

试题编号: 201703-2
试题名称: 学生排队
时间限制: 1.0s
内存限制: 256.0MB
问题描述:

问题描述
  体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。
  例如,下面给出了一组移动的例子,例子中学生的人数为8人。
  0)初始队列中学生的学号依次为1, 2, 3, 4, 5, 6, 7, 8;
  1)第一次调整,命令为“3号同学向后移动2”,表示3号同学出队,向后移动2名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 5, 3, 6, 7, 8;
  2)第二次调整,命令为“8号同学向前移动3”,表示8号同学出队,向前移动3名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 5, 8, 3, 6, 7;
  3)第三次调整,命令为“3号同学向前移动2”,表示3号同学出队,向前移动2名同学的距离,再插入到队列中,新队列中学生的学号依次为1, 2, 4, 3, 5, 8, 6, 7。
  小明记录了所有调整的过程,请问,最终从前向后所有学生的学号依次是多少?
  请特别注意,上述移动过程中所涉及的号码指的是学号,而不是在队伍中的位置。在向后移动时,移动的距离不超过对应同学后面的人数,如果向后移动的距离正好等于对应同学后面的人数则该同学会移动到队列的最后面。在向前移动时,移动的距离不超过对应同学前面的人数,如果向前移动的距离正好等于对应同学前面的人数则该同学会移动到队列的最前面。

输入格式
  输入的第一行包含一个整数n,表示学生的数量,学生的学号由1到n编号。
  第二行包含一个整数m,表示调整的次数。
  接下来m行,每行两个整数p, q,如果q为正,表示学号为p的同学向后移动q,如果q为负,表示学号为p的同学向前移动-q。

输出格式
  输出一行,包含n个整数,相邻两个整数之间由一个空格分隔,表示最终从前向后所有学生的学号。

样例输入
8
3
3 2
8 -3
3 -2
样例输出
1 2 4 3 5 8 6 7
评测用例规模与约定
  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移动均合法。

代码:

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<iomanip>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;

int main(){
	int n , m;
	vector<int> vc; 
	while(cin >> n >> m){
		for(int i = 1 ; i <= n ; i++){
			vc.push_back(i);
		}
		int id , len;
		for(int i = 0 ; i < m ; i++){
			cin >> id >> len;
			int index;
			for(int j = 0 ; j < vc.size(); j++){
				if(id == vc[j]){             //找出此时学号的下标 
					index = j;
					break;
				}
			}
			
			vc.erase(vc.begin() + index);          //擦除该位置的值 
			
			vc.insert(vc.begin() + index + len , id);   //在目标位置插入id 
		}
		
		for(int i = 0 ; i < vc.size(); i++){
			cout << vc[i] << " ";
		}
		cout << endl;
		vc.clear();
	}
    return 0;
}

基于提供的引用,虽未直接提及高校食堂学生排队与点餐系统的设计与实现,但可从中获取相关思路。 基于SSM框架的高校食堂点餐管理系统研究有重要现实意义,引入先进技术和智能化管理模式能提升餐厅管理效率、改善顾客用餐体验,推动餐饮行业数字化转型和提升竞争力,这为高校食堂学生排队与点餐系统的设计提供了方向,可借助先进框架提升系统性能与管理水平 [^1]。 目前学校缺少食堂线上点餐平台,可设计为师生服务的食堂点餐小程序,提供基本线上点餐服务,学生能下单菜品、添加备注取餐时间、查看餐品制作状态,让师生可提前预定餐品节省时间用于学业安排,这对于排队与点餐系统的功能设计有借鉴意义,可将排队信息与点餐功能结合,如显示排队人数、预估等待时间等 [^2]。 基于微信小程序的高校外卖点餐系统采用Java语言编写,使用MySQL数据库,经测试可满足食堂点餐基本要求,在高校食堂学生排队与点餐系统开发中,也可考虑采用类似的技术架构,保证系统的开发效率和稳定性 [^3]。 餐品分类功能在视图层、控制器层、服务层和数据访问对象层之间的交互流程,为排队与点餐系统的模块交互设计提供了参考,系统各功能模块也可按照分层架构进行设计,确保系统的可维护性和扩展性 [^4]。 以下是一个简单的伪代码示例,模拟点餐和排队信息: ```python # 模拟食堂排队与点餐系统 class QueueSystem: def __init__(self): self.queue = [] self.orders = {} def place_order(self, student_id, dish): # 模拟点餐 order_id = len(self.orders) + 1 self.orders[order_id] = { "student_id": student_id, "dish": dish, "status": "排队中" } self.queue.append(order_id) return order_id def get_queue_length(self): # 获取当前排队人数 return len(self.queue) def get_order_status(self, order_id): # 获取订单状态 return self.orders.get(order_id, {}).get("status", "未找到订单") # 使用示例 queue_system = QueueSystem() order_id = queue_system.place_order(1, "红烧肉") print(f"订单 {order_id} 已下单,当前排队人数: {queue_system.get_queue_length()}") print(f"订单 {order_id} 状态: {queue_system.get_order_status(order_id)}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值