CCF-CSP-201609-2 火车购票(第一篇博客试写)

2023-12-03 22:08

本文主要是介绍CCF-CSP-201609-2 火车购票(第一篇博客试写),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

  请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。
  假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。
  购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。
  假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。

输入格式

  输入的第一行包含一个整数n,表示购票指令的数量。
  第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。

输出格式

  输出n行,每行对应一条指令的处理结果。
  对于购票指令p,输出p张车票的编号,按从小到大排序。

样例输入

4
2 5 4 2

样例输出

1 2
6 7 8 9 10
11 12 13 14
;3 4

样例说明
  1. 购2张票,得到座位1、2。
  2. 购5张票,得到座位6至10。
  3. 购4张票,得到座位11至14。
  4. 购2张票,得到座位3、4。
评测用例规模与约定

  对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。


问题分析

  此问题是一个比较简单的模拟,不过如果审题不仔细的话绝对是得不了满分的,这也是大多数人只能拿到90分却不知道为什么的原因。
  注意这句话:如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。
  这里说是相邻,打个比方,1表示已选,0表示未选,那么01000这一排有4个空位,但是相邻的只有最后13个座位。所以我们在写代码的时候要注意这一点,要查询这一排是否有足够的相邻连座。
  还要注意编号最小,比如00100,前两个座和后两个座都是空的连座,那么我们只能选择前两个,所以在写代码时可以直接从第1个开始查询是否连续为空(查询长度长度为当前购票操作),接着从第2个开始······
  测试样例:24
       4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5
  输  出:1 2 3 4
       6 7 8 9
       11 12 13 14
       16 17 18 19
       21 22 23 24
       26 27 28 29
       31 32 33 34
       36 37 38 39
       41 42 43 44
       46 47 48 49
       51 52 53 54
       56 57 58 59
       61 62 63 64
       66 67 68 69
       71 72 73 74
       76 77 78 79
       81 82 83 84
       86 87 88 89
       91 92 93 94
       96 97 98 99
       5 10 15 20 25
       30 35 40 45 50
       55 60 65 70 75
       80 85 90 95 100

100分代码

#include <iostream>
#include <memory.h>
using namespace std;int n;
int opt[110];
int seat[21][6];int main(){//初始化cin>>n;for(int i=1;i<=n;i++)cin>>opt[i];memset(seat,0,sizeof(seat));//处理每个购票指令for(int x=1;x<=n;x++){int nopt=opt[x];//当前购票数int flag=0;//记录是否选择连座,1表示有//对每一排遍历,查询是否有可行的连座for(int i=1;i<=20;i++){int lflag;//记录是否在这一排存在合适连座,1表示无,详见下一条注释for(int sj=1;sj<=5-nopt+1;sj++){lflag=0;for(int dj=0;dj<nopt;dj++){if(seat[i][sj+dj]==1)lflag=1;//查询连续座位时发现了非空座}//如果连续查询时未发现非空座(存在合适的连座),即lflag==0if(lflag==0){//输出合适的连座for(int dj=0;dj<nopt;dj++){seat[i][sj+dj]=1;//并记为非空(1状态)cout<<(i-1)*5+sj+dj<<" ";}flag=1;//找到合适连座break;}}if(flag==1)break;}//如果20排都没找到合适连座,则从最小的非空座开始选,不考虑是否是相邻连座if(flag==0){int cnt=0;for(int i=1;i<=20;i++){if(cnt==nopt)break;for(int j=1;j<=5;j++){if(cnt==nopt)break;if(seat[i][j]==0){cnt++;seat[i][j]=1;cout<<(i-1)*5+j<<" ";}}}}cout<<endl;}return 0;
}

这篇关于CCF-CSP-201609-2 火车购票(第一篇博客试写)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

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

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

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

搜狗浏览器打开CSDN博客排版错乱问题解决

之前发生过几次,不知道什么原因。 今天一直用着好好的,打开一个csdn连接,显示404,博文被删除了,于是就用百度快照打开试试,百度快照打开显示的排版很乱也没找到有用信息。 后面再浏览CSDN博客就排版错乱,显示一个大大二维码图片。 尝试删除IE缓存无效,使用谷歌浏览是好的。 基本锁定就是搜狗缓存导致的,于是找如何删除搜狗缓存   清除后恢复正常

CSP-J基础之cmath常见函数

文章目录 前言1. **`sin` 函数**2. **`cos` 函数**3. **`exp` 函数**4. **`log` 函数**5. **`fabs` 函数**6. **`pow` 函数**7. **`sqrt` 函数**8. **`ceil` 函数**9. **`floor` 函数** 总结 前言 在计算机科学与编程中,数学函数是解决各种计算问题的基础工具。C++标准

828华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台

华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Halo介绍2.1 Halo 简介2.2 Halo 特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云Flexus云服务器X实例4.

基于Spring Boot的火车订票管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:JAVA语言 + Spring Boot框架 工具:IDEA/Eclipse、Navicat、Tomcat 系统展示 首页 管理员界面 用户购票 订单管理 摘要 随着网络技术的不断发展,火车订票管理系统逐渐由传统的线下操作转变为线上服

缓存的常见问题 以及解决博客文章

1.jedispool 连 redis 高并发卡死  (子非鱼yy) https://blog.csdn.net/ztx114/article/details/78291734 2. Redis安装及主从配置 https://blog.csdn.net/ztx114/article/details/78320193 3.Spring中使用RedisTemplate操作Redis(sprin