CCF201703-2 学生排队
问题描述:
试题编号: | 201703-2 |
试题名称: | 学生排队 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。 输入格式 输入的第一行包含一个整数n,表示学生的数量,学生的学号由1到n编号。 输出格式 输出一行,包含n个整数,相邻两个整数之间由一个空格分隔,表示最终从前向后所有学生的学号。 样例输入 8 样例输出 1 2 4 3 5 8 6 7 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移动均合法。 |
解题思路:
这是一个模拟题,关键在于数据表示。
方法一:使用STL的向量vector来实现。实际上是一种代码最为简洁的做法。
需要注意的是下标运算逻辑。
方法二:数组sno2pos[]用于存储各个学生(学号)所在的位置;
数组pos2sno[]是索引,pos2sno[i]=s表示学生s位于位置i。
这个程序应该是最快速的版本。
解题代码:(方法一)
#include <iostream>
#include <vector>
using namespace std;
vector<int> v;
int find(int x){int ret = - 1;for(int i = 0; i < (int)v.size(); i++)if(v[i] == x)return i;return ret;
}
int main(){int n, m, p, q;// 读入数据cin >> n >> m;// 初始化for(int i=1; i<=n; i++)v.push_back(i);// 模拟移动过程for(int i=1; i<=m; i++) {cin >> p >> q;int pos = find(p);v.insert(v.begin() + pos + (q > 0 ? q + 1 : q), p);v.erase(v.begin() + pos + (q < 0 ? 1 : 0));}// 输出结果cout << v[0];for(int i = 1; i < (int)v.size(); i++)cout << " " << v[i];cout << endl;return 0;
}
解题代码:(方法二)
#include <iostream>
using namespace std;
const int N = 1000;
int sno2pos[N+1]; // 学号所在位置
int pos2sno[N+1]; // 位置上的学号
int main(){int n, m, p, q;cin >> n >> m;for(int i=1; i<=n; i++) {sno2pos[i] = i;pos2sno[i] = i;}for(int i=1; i<=m; i++) {int pos1, pos2, sno2;cin >> p >> q;if(q != 0) {int move, end;if(q > 0) {move = 1;end = q;} else {move = -1;end = -q;}pos1 = sno2pos[p];for(int i=1; i<=end; i++) {sno2 = pos2sno[pos1 + move];pos2 = sno2pos[sno2];pos2sno[pos1] = sno2;sno2pos[sno2] = pos1;pos1 = pos2;}pos2sno[pos2] = p;sno2pos[p] += q;}}cout << pos2sno[1];for(int i=2; i<=n; i++)cout << " " << pos2sno[i];cout << endl;return 0;
}
CCF201703-2 学生排队相关推荐
- CCF201703-2 学生排队(100分)
试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排 ...
- CCF-CSP 201703-2 试题名称: 学生排队(满分代码)
问题描述 试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到 ...
- CCF 201703-2 学生排队
试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排 ...
- java利用队列实现一个学生排队买票功能
1.利用队列实现一个学生排队买票功能 1.定义一个学生类Student,包括学号No.姓名Name.性别Gender.年龄Age等信息 2.定义一个队列类Queue,用于将学生进行队列排序 3.可以从 ...
- 201703-2学生排队
问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整.一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列. ...
- ccf-csp #201703-2 学生排队
题目链接:http://118.190.20.162/view.page?gpid=T56 题目分析 一开始看到题目描述以为是一道有点意思的算法题,看完数据范围1 ≤ n ≤ 1000,1 ≤ m ≤ ...
- CSP认证201703-2 学生排队[C++题解]:模拟
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析:模拟,按照题目要求暴力来做,时间复杂度O(mn)O(mn)O(mn) AC代码 #include<bits/stdc++.h&g ...
- CCF 2017-3-2 学生排队
样例输入 8 3 3 2 8 -3 3 -2 样例输出 1 2 4 3 5 8 6 7 思路:移动过程中,涉及到元素在中间位置的插入和删除,list容器是最佳选择:先遍历整个链表找到要移动的元素的位置 ...
- 201703-2-学生排队
试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排 ...
最新文章
- HTML5 geolocation和BaiduMap、BingMap、GoogleMap
- jackson (json、xml的序列化与反序列化)
- 【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )
- 斗鱼实名认证 mysql_斗鱼扩展--DouyuRoom使用说明(十四)
- python代码颜色不同_Python填充任意颜色,不同算法时间差异分析说明
- java根据pdf模板生成pdf_Java 复制、压缩PDF文档
- 登录id 黑苹果_黑苹果MacOSCatalina无法登录AppStore修复
- windows 获取系统CPU和进程CPU 内存等信息
- STM32中断应用总结
- Python collection模块与深浅拷贝
- java怎么释放分配的内存,linux 内存的分配和释放,linux分配释放
- 解决360 安装补丁智能忽略的问题!
- Java POI 合并单元格操作以及代码示例
- (27)语义分割--cityscape数据集的读取和使用
- 信息搜集之CDN知识
- QQ群创建者和管理员
- 苹果充电器怎么辨别真假_airpods怎么辨别真假?
- Halcon入门(3)——回形针目标提取
- 在stm32cubemx的freertos中创总任务跑支线任务
- 大数据发展前沿 期末总结复习
热门文章
- Thinkpad T61/R61/X61安装XP驱动流程
- rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践
- 开源 协作工具_使用HackMD在开源项目上进行协作
- 不同管理岗层级的团队影响力_高影响力团队的最高要求
- red hat 5.3补丁_您如何解释组织的宗旨? 来自Red Hat的3课
- git查看提交者提交历史_如何维护您的提交者
- java 保存和读取本地文件
- 用一个案例介绍jQuery插件的使用和写法
- 厉害了 | 一秒切换Hexo中英文,厉害了!!
- 必知必会 | 关于Redis缓存这三大问题,必知必会