2353 排队问题
1.0 秒 131,072.0 KB 20 分 初学者3级题
n个身高不同的小朋友,分别站在编号1-n的格子里,n个格子排成1列。现在我们希望他们能够按照身高的顺序从低到高排成1列。按现在的顺序给出n个小朋友的身高,问所有小朋友总共需要移动多少个格子,才能按照身高从低到高的顺序排好队。注:从格子3移动到格子1,需要移动2个格子。

例如:4个小朋友,身高分别是:

1220 1210 1200 1250

按照身高顺序拍好后,应该是:

1200 1210 1220 1250,身高1200的小朋友需要移动2格,身高1210和1250的小朋友,不需要移动,身高1220的小朋友需要移动2格,4个小朋友总共需要移动2 + 2 = 4格。

输入
第一行:一个数n(1<=n<=10000)。
后面n行:每行1个数,表示小朋友的身高。
输出
输出所有小朋友移动距离之和。
输入样例
4
1220
1210
1200
1250
输出样例
4
分析
采用两个数组,一个数组a存储输入值,一个数组b存储排序后的值
两数组中的坐标差即为每位小朋友的移动距离,这里需要在b数组中查找a中数据的位置。
排序使用sort函数
二分查找使用lower_bound()函数

AC代码
下面代码中数组从1开始存储,因此这里sort函数从b[1]开始排序:sort(b+1,b+n+1)因为数组中b[0]没存放东西,从b[1]开始存放。
同样的道理,lower_bound()函数也是从b[1]开始查找:lower_bound(b+1,b+1+n,a[i])-b后面-b是减去数组首地址.

如果

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;int a[10001],b[10001],n,dis=0;int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];b[i]=a[i];}sort(b+1,b+n+1);for(int i=1;i<=n;i++){int pos=lower_bound(b+1,b+n+1,a[i])-b;//    cout<<pos<<endl;dis+=abs(pos-i);}cout<<dis<<endl;
}

补充知识
sort()
Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是最后一位要排序地址的下一位(也就是左闭右开区间的由来)

(3)第三个参数是排序的方法,默认的排序方法是从小到大排序。
比如

sort(a,a+n);//对数组a进行排序,数组长度为n,a+n表示最后一个元素的下一个位置

lower_bound()
lower_bound( begin,end,num ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。注意区间左闭右开

51Nod2353 排队问题相关推荐

  1. PAT甲级排队问题合集 (持续更新中)

    已加入的习题 A1014,A1017 问题1和2共性 1. 都是排队问题 2. 都有一条黄线 3. 都需要找到最先离开人的队伍 4. 都有着服务时间段限制(迟于某个时间点来不予受理) 问题1:1014 ...

  2. 递归与递推 普通排队问题及带约束条件的排队问题 c代码

    先看下题目: 电影院买票排队,票价50,排队的人中携带50元的有20个人,携带100的有10个人,售票处开始时没有余额, 问最多有多少种排队方式使得售票处能够找的开(携带相同数额的人交换位置算一种排队 ...

  3. 排队问题解题思路_三大策略、5个技巧,完美解决超市收银排队难题

    在超市购物时,经常看到许多顾客从货架上将称心的商品往购物车里放,可一看到收银台前等待交款的顾客长龙,就将购物车放一边,空手走出卖场.在当今节奏越来越快的社会里,大多数顾客是无法忍受漫长等待的. 虽然顾 ...

  4. 排队问题解题思路_1120各数的认识解决问题

    点击上方蓝字关注我哦! 成员简介 任贵贤,寿阳县北大街小学教师,寿阳县小学数学名师工作室骨干队员. 阅读分享 -----摘自<小学数学教师>2020年第1期 课堂实录 教材分析 本节课是在 ...

  5. 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!

    一:题目 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾 ...

  6. POJ 2259 team queue团队排队问题

    题目链接: http://poj.org/problem?id=2259 题目大意: 告诉你一堆人(m个人是一组的,n个人是一组的....):然后一个人来排队了,先看下有自己组的熟人吗?有的话直接排在 ...

  7. 7-4 银行排队问题之单队列多窗口加VIP服务 (30 分)

    7-4 银行排队问题之单队列多窗口加VIP服务 (30 分) 说实话这道题挺恶心 有意思的,大模拟,主要的思路就是模拟时间轴. 题目描述 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时 ...

  8. 7-2 银行排队问题之单窗口“夹塞”版 (30 分)

    PTA 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客 ...

  9. 7-3 银行排队问题之单队列多窗口服务 (25 分)

    7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可 ...

最新文章

  1. [j2me]类似于OperaMini二级菜单界面演练[1]
  2. HTTP请求时connectionRequestTimeout 、connectionTimeout、socketTimeout三个超时时间的含义...
  3. JavaScript打印杨辉三角
  4. 002---tcp/ip五层详解
  5. linux卸载db2cli,DB2 for linux 安装
  6. Linux命令中的$()和${}的区别
  7. 基于matlab实现的云模型计算隶属度,基于MATLAB实现的云模型计算隶属度
  8. 解决ubuntu系统root用户下Chrome无法启动问题
  9. DotNetty网络通信框架学习
  10. 如何使用jQuery打开Bootstrap模式窗口?
  11. java实现复数之间加减乘运算_用java实现复数的加减乘除运算(改进第1次)
  12. ibm服务器刷主板系统,IBM X3850 X5服务器更换主板后修改主板信息
  13. 数据分析越来越火,如何做一个靠谱的职业规划?
  14. 软件使用经验合集(操作系统、常用软件)
  15. 为什么能上QQ不能打开网页
  16. ArcGIS空间分析——热点分析
  17. 十万个为什么哪个版本适合小学生阅读
  18. esxi添加硬盘驱动
  19. 【上海落户-个人感受】想到一个城市落户,需要提前打算。
  20. 利用百度文库实现精准引流

热门文章

  1. 《C与指针》第七章练习
  2. Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作
  3. ASP.NET页面的CheckBoxList组件
  4. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...
  5. asp.net 中datagrid ItemDataBound\ItemCreated
  6. python库_计算机二级教程 Python语言程序设计,第10章python第三方库概览
  7. 用神经网络分类矩阵和矩阵的转置
  8. 用数学方法构造神经网路的迭代次数1-9
  9. 电脑qq文件服务器地址,在电脑上接收QQ地理位置打不开,提示获取不到详细地址...
  10. SLAM-ch2-使用kdevelop创建helloWorld程序