排解忧伤

链接: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程序设计决赛——排解忧伤相关推荐

  1. 【比赛回顾】广工2020程序设计初赛C-秋夜hard

    C-秋夜hard 题目: 问题分析: 震惊了,到底是怎么A能够使果子变多的!!hhh看到了一条致富之道.emmmm,对比一下上一题,这两个树我们知道,其实没有区别,因为操作方式都是一样的,而不像上一题 ...

  2. 【比赛回顾】广工2020程序设计初赛B-秋夜easy

    B-秋夜easy 题目: 问题分析: 这孩子力气真大,这枣树枣子也真多hhh,这两个树我们知道,要想使它们数量一样,就一定要使先A多枣子的那一颗树,使它的枣子变少,不然永远都不可能达成要求.故一开始要 ...

  3. 【比赛回顾】2020广工文远知行杯新生程序设计竞赛(初赛)

    [比赛回顾]2020广工文远知行杯新生程序设计竞赛(初赛) 写在前面: 已经更新完除E和F以外的题解(因为这两道我没有时间做了,以后抽空做完后补充).可能我的题解并不是最优的,欢迎交流和讨论~ 文章目 ...

  4. 2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤

    2020年广东工业大学第十届文远知行杯新生程序设计竞赛(同步赛)G.排解忧伤 题目链接 题目描述 猪猪参加小米赞助的icpc比赛之后惨遭打铁,为了排解忧伤,他开始观察嘉宾席. 嘉宾席是间隔为1,一字排 ...

  5. 广工工作室各方向学习指南

    广工工作室各方向学习指南 新的学期即将开始,计算机学院各大工作室也陆续会在本学期开始招新.但是想要加入工作室,我们需要一定的知识储备,并顺利通过所有的考核.此刻的你也许还很迷茫,对工作室的各大方向和和 ...

  6. 2019C语言程序设计大赛,2019年全国高校计算机能力挑战赛 C语言程序设计决赛

    2019年全国高校计算机能力挑战赛 C语言程序设计决赛 毕竟这个比赛是第一次举办,能理解.. 希望未来再举办时,能够再完善一下题面表述.数据范围. 话说区域赛获奖名额有点少吧.舍友花60块想混个创新创 ...

  7. 输入学号查询课程c语言,广工c语言课程设计

    广工c语言课程设计 目 录 一.设计目的 二.设计要求 三.总体设计 四.详细设计 五.调试与测试 六.结果 七.心得与体会 八 .程序清单 一.设计目的 (1)基本掌握面向过程程序设计的基本思路和方 ...

  8. 广工学生“纯手工”打造赛车 将出征F1赛道

    转播到腾讯微博 一辆红银色流线型方程式赛车昨日亮相广东工业大学图书馆广场.这辆赛车为该校二十余名学生"纯手工"打造,本月将登陆上海国际赛车场.南都记者邹卫摄 南都讯 记者刘黎霞 实 ...

  9. 广工计算机学院男女比例,广东高校新生数据大揭秘,哪所大学男女比例最大

    最近,多所高校公布了新生数据大揭秘. 什么学院男女比例最均衡?年龄最小的新生多大就读大学了?想知道这些问题的答案吗?一起往下看吧! 华南理工大学: 男女比例:"小姐姐含量"增加 今 ...

最新文章

  1. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】
  2. 一场事先预告的砸冰箱盛宴
  3. 30K程序员的简述:如何成为高级开发人员
  4. 第六章 模型的验证、监控与调优
  5. gerrit的Change-Id机制和hook机制
  6. linux获取其他主机ipv6,linux – 如何获取IPv6主机的范围?
  7. ionic build Android错误记录 error in opening zip file
  8. 【面试相关】python实现快速幂取余算法详解
  9. 时间同步绝对是一个大问题
  10. XenApp 6安装过程中的两个常见错误
  11. laravel services.php,「Laravel框架中使用Service模式」- 海风纷飞Blog
  12. 重标极差法(R/S)在matlab上的实现
  13. Unity 2D Animation(2D动画)学习
  14. PostgreSQL 13 新特性之 FETCH FIRST WITH TIES
  15. 计算机硬盘有坏道,硬盘有坏道就不能用了吗?别再吃哑巴亏了,今天跟大家再说一次!...
  16. excel表格数据导入导出
  17. 计算机的四屏故障维修,计算机应用之显卡故障维修技巧
  18. 墨者学院 电子数据取证
  19. 360浏览器等被金山毒霸网强制霸占问题解决
  20. 【Python】三、代码组织架构

热门文章

  1. Jmeter模拟上传图片
  2. 测试下mysql的几种连接,加深理解
  3. 天润云通过港交所聆讯:依赖教育行业客户,预计下半年业绩将下滑
  4. 【水】Dev-c++黑暗模式教程
  5. mac搜索文件为什么啥都搜不出来?
  6. 【深度学习】实验1答案:Softmax实现手写数字识别
  7. python安装出现modify_pycharm之运行时出现Edit configuration及老是弹出Modify Setup(转载,亲测有效)...
  8. 故宫真相关于长高在青春期显露了一个老临
  9. 鸿蒙手机自动化测试,先睹为快!全球首款华为手机已经升级到鸿蒙了
  10. 懂商业的技术合伙人(1):你是怎样成为打工仔的