CCF - 201703-2 - 学生排队

2024-09-01 08:08
文章标签 ccf 学生 排队 201703

本文主要是介绍CCF - 201703-2 - 学生排队,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

试题编号:    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>
int main()
{int i,n,m,p,q,move,goal,posp,nummove,num[1001],pos[1001];scanf("%d %d",&n,&m);for(i=1;i<=n;i++){num[i]=i;//i位置的学生pos[i]=i;//i学生的位置}while(m--){scanf("%d %d",&p,&q);move=q>0?1:-1;goal=q>0?q:-q;posp=pos[p];for(i=1;i<=goal;i++){nummove=num[posp+move];num[posp]=nummove;pos[nummove]=posp;posp=posp+move;}pos[p]=posp;num[posp]=p;}for(i=1;i<=n;i++)printf("%d ",num[i]);printf("\n");return 0;
}
#include<stdio.h>
#include<malloc.h>
typedef struct student_node
{int num;struct student_node * front;struct student_node * next;
}student,* pstu;
int main()
{int i,n,m,p,q;scanf("%d %d",&n,&m);pstu head=(pstu)malloc(sizeof(student));head->front=NULL;pstu ps=head;for(i=1;i<n;i++){ps->num=i;pstu pss=(pstu)malloc(sizeof(student));ps->next=pss;pss->front=ps;ps=pss;}ps->num=n;ps->next=NULL;while(m--){scanf("%d %d",&p,&q);ps=head;while(ps->num!=p)ps=ps->next;if(ps->front==NULL){ps->next->front=NULL;head=ps->next;}else if(ps->next==NULL)ps->front->next=NULL;else{ps->front->next=ps->next;ps->next->front=ps->front;}pstu pp=ps;if(q>0){while(q--)ps=ps->next;if(ps->next==NULL){ps->next=pp;pp->front=ps;pp->next=NULL;}else{pp->next=ps->next;ps->next->front=pp;ps->next=pp;pp->front=ps;}}else if(q<0){q=-q;while(q--)ps=ps->front;if(ps->front==NULL){head=pp;ps->front=pp;pp->next=ps;pp->front=NULL;}else{pp->front=ps->front;pp->front->next=pp;ps->front=pp;pp->next=ps;}}for(ps=head,i=0;i<n;i++){printf("%d ",ps->num);ps=ps->next;}printf("\n");}for(ps=head,i=0;i<n;i++){printf("%d ",ps->num);ps=ps->next;}printf("\n");return 0;
}

 

这篇关于CCF - 201703-2 - 学生排队的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126392

相关文章

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

家庭和学生用户笔记本电脑配置方案

2.6.1  家庭和学生用户笔记本电脑配置方案   2.6.1  家庭和学生用户笔记本电脑配置方案   普通家庭用户、学生用户主要用于上网、娱乐、学习等,这类用户要求笔记本电脑的各方面 功能比较均衡。在选购此类笔记本电脑时,主要考虑外观设计方面要比较时尚,而且性能上也要 够强,一些大型复杂的软件以及目前的主流游戏都要能够流畅地运行才行。   对于CPU方面,可以考虑目前主流的第二

看病要排队这个是地球人都知道的常识

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝唯有付出,才有丰富的果实收获! 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

springboot学生社团管理系统—计算机毕业设计源码26281

目录 摘要 Abstract 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3

家校携手应对开学焦虑,共筑学生心理健康防线

随着新学期的钟声敲响,不少学生尤其是新生,开始感到焦虑。他们或是对课程难度心存畏惧,担心自己无法跟上学习节奏;或是害怕在新环境中无法找到归属感,担心人际关系处理不当。 这种情绪在社交媒体上屡见不鲜,如一位家长在社交平台上的分享,这位就读于寄宿制高中的学生,在首次回家后的周末,向家人吐露了对新环境的不适应和学业的挫败感,这不仅仅是一个个案,而是众多学生共同的心声。 深入剖析开学焦虑的背后,不难发

基于python学生信息成绩的管理系统设计与实现,很详细!

需求分析 1.1数据操纵 (1)录入并保存学生的基本信息及选课信息(如学号、姓名、性别、专业、课程名称、课程成绩); (2)可以对已经保存的学生基本信息及选课信息进行修改; (3)可以根据特定字段的值查询学生的相关信息(如通过学号查询所选的课程)和课程的相关信息(如选修某课程的所有学生); (4)可以对特定的数据条目进行删除。 1.2数据统计 学生信息统计:根据学号对学生成绩统计(如

day-49 让所有学生保持开心的分组方法数

思路 利用Collections.sort()函数对数组进行排序,依次向后遍历即可,如果nums.get(i)<i+1&&nums.get(i+1)>i+1 解题过程 注意特殊情况:全选和不选要单独讨论 Code class Solution {public int countWays(List<Integer> nums) {int len=nums.size();Collections

用基于信息熵的topsis方法实现学生成绩的综合排名

TOPSIS方法排序的基本思路是首先定义决策问题的正理想解(即最好的)和负理想解(即最坏的),然后把实际可行解(样本)和正理想解与负理想解作比较。通过计算实际可行解与正理想解和负理想解的加权欧氏距离,得出实际可行解与正理想解的接近程度,以此作为排序的依据。若某个可行解(样本)最靠近理想解,同时又最远离负理想解,则此解排序最靠前。 通常,当排序时有多个指标需要考虑时,常用“专家打分法”来确定各个指