【比赛回顾】广工2020程序设计决赛——排解忧伤
排解忧伤
链接:https://ac.nowcoder.com/acm/contest/9692/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
猪猪参加小米赞助的icpc比赛之后惨遭打铁,为了排解忧伤,他开始观察嘉宾席。
嘉宾席是间隔为1,一字排开的n个座椅,从左至右标号为1到n。有m个嘉宾,每个嘉宾有一个心仪座位Ai,注意,不同嘉宾的心仪座位可能相同。嘉宾们会统一从一排座位的最左侧依次入场。一个嘉宾首先会走到他心仪的位子,如果此时他发现没有人坐,他就会立刻占据这个位子。如果已经有人坐了,该嘉宾会继续向右走,直到遇到一个空位子,立刻坐下。每个嘉宾的怒气值是他额外行走的距离,也就是最终的座位到心仪座位的距离。如果走到最后都没有找到位置,嘉宾会怒气爆棚。
显然,座位存在一个先到先得的关系,不是每个人都能坐到心仪的座位。现在,猪猪想思考什么样的入场顺序可以使嘉宾们怒气值之和最小,请你帮帮他。
输出最小怒气和。如果无论怎样安排入场顺序,都不能使所有嘉宾找到位子,输出-1。
输入描述:
第一行两个正整数n,m
第二行m个用空格隔开的正整数,从左往右第i个正整数表示Ai
0<m<=n<=100000,0<Ai<=n
输出描述:
一行一个正整数表示最小怒气和
示例1
输入
5 4
3 2 4 3
输出
2
问题分析:
虽然不能严谨的证明,但是其实自己模拟几组数据再操作一下就发现,无论怎么操作只要每个人的愿望座位定下来,总怒气值就是定值,都不会变(只不过看是谁生气而已 笑)。
其实最简单的或者说最容易想到的方法就是按照题目的说法,用一个数组来记录位置是否被占用,占用就检索下一个是否被占用,最后用下标相减就是怒气值。
但这个算法的时间复杂度可是O(N^2)呀!我们又看到了题目熟悉的0<m<=n<=100000
机智的我又看了一下提交的情况,一半都是TLE超时…说明这个算法不太行。
emmmm也许你和我一样在比赛时一下子失去了方向。
现在比完静下心来思考,其实在证明出无论如何安排总怒气值不变后,难度就降低很多了,你需要考虑的就是如何去计算出结果而已。
我们就按照椅子的顺序来考虑吧,因为每个嘉宾要么直接做到心仪的位置,要么直接往后走,不存在往前走的情况,那么我们就可以设置一个endflag来表示到目前这个椅子为止,坐的最右边的嘉宾的位置。然后后面先判断与endflag的大小关系,再决定是否要计算angry和更新endflag 的方法。
AC代码:
#include <bits/stdc++.h>
using namespace std;int n[100010];int main()
{int total,guest;int t;int endflag=0;//一定要ll不然会WAlong long angry=0;cin >> total >> guest;//用n数组标记每个椅子有多少嘉宾喜欢for ( int i=1; i<=guest; ++i )cin >> t, n[t]++;for ( int i=1; i<=total; ++i){//没有嘉宾喜欢的椅子就不用判断if ( n[i] ){//若大于endflag说明这个位置还没有人做 可以占用if ( i>endflag ){if ( n[i]==1 )endflag = i;//如果很多人同时喜欢这个位置,那么根据人数更新endflag同时计算angryelse{endflag = i+n[i]-1;t = 1;for ( int j=1; j<=n[i]-1; ++j )angry += t++;}}else{//若小于,说明这个位置之前的位置肯定已经做满了//因为我们是按照椅子的顺序进行遍历的//所以这个时候我们就要用另一种方式更新endflag和angryendflag += n[i];t = endflag;for ( int j=1; j<=n[i]; ++j )angry += (t-i),t--;}}}if ( endflag > total )cout << "-1";elsecout << angry;}
如果上面更新endflag和angry的计算方法你还是有点不懂,推荐你以
10 81 4 4 5 5 6 6 6
的例子自己在草稿纸上写写就会明白的~
当然,我这个还是太过冗长,可以优化。
比如我可以直接存放每个嘉宾的心仪位置
然后通过endflag=max(m[i],endflag+1)的方式更新,这样就不用讨论那么多种情况了。
【比赛回顾】广工2020程序设计决赛——排解忧伤相关推荐
- 【比赛回顾】广工2020程序设计初赛C-秋夜hard
C-秋夜hard 题目: 问题分析: 震惊了,到底是怎么A能够使果子变多的!!hhh看到了一条致富之道.emmmm,对比一下上一题,这两个树我们知道,其实没有区别,因为操作方式都是一样的,而不像上一题 ...
- 【比赛回顾】广工2020程序设计初赛B-秋夜easy
B-秋夜easy 题目: 问题分析: 这孩子力气真大,这枣树枣子也真多hhh,这两个树我们知道,要想使它们数量一样,就一定要使先A多枣子的那一颗树,使它的枣子变少,不然永远都不可能达成要求.故一开始要 ...
- 【比赛回顾】2020广工文远知行杯新生程序设计竞赛(初赛)
[比赛回顾]2020广工文远知行杯新生程序设计竞赛(初赛) 写在前面: 已经更新完除E和F以外的题解(因为这两道我没有时间做了,以后抽空做完后补充).可能我的题解并不是最优的,欢迎交流和讨论~ 文章目 ...
- 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤
2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤 题目链接 题目描述 猪猪参加小米赞助的icpc比赛之后惨遭打铁,为了排解忧伤,他开始观察嘉宾席. 嘉宾席是间隔为1,一字排 ...
- 广工工作室各方向学习指南
广工工作室各方向学习指南 新的学期即将开始,计算机学院各大工作室也陆续会在本学期开始招新.但是想要加入工作室,我们需要一定的知识储备,并顺利通过所有的考核.此刻的你也许还很迷茫,对工作室的各大方向和和 ...
- 2019C语言程序设计大赛,2019年全国高校计算机能力挑战赛 C语言程序设计决赛
2019年全国高校计算机能力挑战赛 C语言程序设计决赛 毕竟这个比赛是第一次举办,能理解.. 希望未来再举办时,能够再完善一下题面表述.数据范围. 话说区域赛获奖名额有点少吧.舍友花60块想混个创新创 ...
- 输入学号查询课程c语言,广工c语言课程设计
广工c语言课程设计 目 录 一.设计目的 二.设计要求 三.总体设计 四.详细设计 五.调试与测试 六.结果 七.心得与体会 八 .程序清单 一.设计目的 (1)基本掌握面向过程程序设计的基本思路和方 ...
- 广工学生“纯手工”打造赛车 将出征F1赛道
转播到腾讯微博 一辆红银色流线型方程式赛车昨日亮相广东工业大学图书馆广场.这辆赛车为该校二十余名学生"纯手工"打造,本月将登陆上海国际赛车场.南都记者邹卫摄 南都讯 记者刘黎霞 实 ...
- 广工计算机学院男女比例,广东高校新生数据大揭秘,哪所大学男女比例最大
最近,多所高校公布了新生数据大揭秘. 什么学院男女比例最均衡?年龄最小的新生多大就读大学了?想知道这些问题的答案吗?一起往下看吧! 华南理工大学: 男女比例:"小姐姐含量"增加 今 ...
最新文章
- mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
- 一场事先预告的砸冰箱盛宴
- 30K程序员的简述:如何成为高级开发人员
- 第六章 模型的验证、监控与调优
- gerrit的Change-Id机制和hook机制
- linux获取其他主机ipv6,linux – 如何获取IPv6主机的范围?
- ionic build Android错误记录 error in opening zip file
- 【面试相关】python实现快速幂取余算法详解
- 时间同步绝对是一个大问题
- XenApp 6安装过程中的两个常见错误
- laravel services.php,「Laravel框架中使用Service模式」- 海风纷飞Blog
- 重标极差法(R/S)在matlab上的实现
- Unity 2D Animation(2D动画)学习
- PostgreSQL 13 新特性之 FETCH FIRST WITH TIES
- 计算机硬盘有坏道,硬盘有坏道就不能用了吗?别再吃哑巴亏了,今天跟大家再说一次!...
- excel表格数据导入导出
- 计算机的四屏故障维修,计算机应用之显卡故障维修技巧
- 墨者学院 电子数据取证
- 360浏览器等被金山毒霸网强制霸占问题解决
- 【Python】三、代码组织架构
热门文章
- Jmeter模拟上传图片
- 测试下mysql的几种连接,加深理解
- 天润云通过港交所聆讯:依赖教育行业客户,预计下半年业绩将下滑
- 【水】Dev-c++黑暗模式教程
- mac搜索文件为什么啥都搜不出来?
- 【深度学习】实验1答案:Softmax实现手写数字识别
- python安装出现modify_pycharm之运行时出现Edit configuration及老是弹出Modify Setup(转载,亲测有效)...
- 故宫真相关于长高在青春期显露了一个老临
- 鸿蒙手机自动化测试,先睹为快!全球首款华为手机已经升级到鸿蒙了
- 懂商业的技术合伙人(1):你是怎样成为打工仔的