首页
关于
Search
1
Fastadmin 美化后台样式
310,894 阅读
2
关于破解移动宽带光猫 型号: GS3101 超级管理员密码
26,919 阅读
3
给Thinkphp3用上composer
19,965 阅读
4
Wallpaper完美壁纸修复天气bug(无需申请API)
19,750 阅读
5
PECL无法安装时手动编译安装PHP扩展
19,607 阅读
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
登录
Search
标签搜索
php
git
Windows
wkhtmltopdf
短信
defense
API
Google Photos
python
wkhtmltoimage
网页快照
linux
ssr
https
mail
sms
小程序
封装
ComoBox
拼多多
Guooo
累计撰写
126
篇文章
累计收到
81
条评论
首页
栏目
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
页面
关于
搜索到
9
篇与
的结果
2017-09-04
【CCF】火车购票
题目问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。 购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。 假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。输入格式 输入的第一行包含一个整数n,表示购票指令的数量。 第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。输出格式 输出n行,每行对应一条指令的处理结果。 对于购票指令p,输出p张车票的编号,按从小到大排序。样例输入42 5 4 2样例输出1 26 7 8 9 1011 12 13 143 4样例说明 1) 购2张票,得到座位1、2。 2) 购5张票,得到座位6至10。 3) 购4张票,得到座位11至14。 4) 购2张票,得到座位3、4。评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。思路当初废了九牛二虎之力,想使用二维数组一行行地判断,总代码有一百多行,费时费心费力不讨好。后来网上搜了一下,发现有人利用C++中队列(queue)的特性给出了更好的解法,于是以此思路类推,写出了以下代码代码#include <bits/stdc++.h> using namespace std; queue<int> m[21]; int n,num; int i,j,row; int main(){ //freopen("input/trainticket.txt","r",stdin); //模拟输入,记得提交前关闭 for(row=1,j=1;row<=20;row++){ //初始化队列 m[row].push(j++); m[row].push(j++); m[row].push(j++); m[row].push(j++); m[row].push(j++); } cin>>n; //购票行数 for(i=1;i<=n;i++){ cin>>num; //购票数 bool find = false; //查找连续座位 for(row=1;row<=20;row++){ if(m[row].size() >= num){ //当前队列可用 find = true; //已找到位置 for(j=0;j<num;j++){ cout<<m[row].front()<<" "; m[row].pop(); //删除最早进入队列的元素 } break; } } //不连续座位 if(!find){ for(row=1;row<=20;row++){ while(!m[row].empty() && num>0){ //一直判断到num为0 cout<<m[row].front()<<' '; m[row].pop(); num--; } } } cout<<endl; } return 0; }引用:http://blog.csdn.net/moilk_nepho/article/details/52950519
2017年09月04日
1,749 阅读
0 评论
0 点赞
1
2