CodeForces 815E Karen and Neighborhood题解

来源:互联网 发布:淘宝买家手机号码采集 编辑:程序博客网 时间:2024/06/05 17:28

题目

题意

有n个房屋一字排开,并从左至右编号为1, 2, …, n。有k个人陆续入住,每个人会挑选无人住的房屋,如果有多间可以选择,那么选择离已有人住的房屋最远的那一间(不是总距离最远哦,如果还有多个选择,选择编号最小的。

第一个人永远会住进第一间,问最后一个人会住进哪间屋子。

题解

显然第2个人会住进最后一间,算是一个特例,在这之后,有人住的屋子会把剩余的分成多个区间,下一个人入住时,会选择一个区间中间的房屋入住。

解这题的时候绕了很多弯路,比如一开始试图找到一个优雅的公式去解题,比如像二分一样,若有a个人要在一个区间里选房子住,第一个一定是住中间,然后区间被分为两个,剩余的人先左边住1个,右边住一个,再左边住两个,右边住两个,再左边住四个……这样就能确定最后一个人会住进哪一边,并且有几个人也选择了那一侧,再缩小范围继续算,结果发现有很多意外情况,加了各种if else后,才发现这个思路就不对。

后来还是用一个很暴力直接的方法过了这题,而且不慢也不复杂,至少比上面的各种if else还要优雅:

  1. 每次入住的时候,假设现在有x个区间,因为想找一个离别人尽量远的,所以一定会选择(x+1)/2尽量大的区间(为什么不是x?这是个坑,你想想),如果有多个,就选择编号最小的
  2. 入住之后,区间会被分成两个(除非原区间长度小于等于2),所以任意时刻,区间的长度最多四种。
  3. 按照区间的长度归类,每次可以批量让一群人入住到一种长度的区间中,每个区间住一个,这样区间的数量成指数级增长,很快人就都能住完。
  4. 如果将区间分为左右两种后,再分别按3归类,那么最后就能判断出最后一个人进入了哪边的区间,且还有几个人进入了那边的区间,递归。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 来月经吃了香瓜怎么办 减肥期间晚上有饭局怎么办 减肥期间遇到晚上聚餐怎么办 婴儿脸不向上睡怎么办 睡觉压奶了疼怎么办 堵奶了挤不下来怎么办 孕36周胎儿腿短怎么办 孕晚期胎儿腿短怎么办 孕晚期宝宝腿短怎么办 手劳累过度麻痛怎么办 大人发烧40不退怎么办? 颈椎扯的脑袋疼怎么办 孕妇颈椎痛导致失眠怎么办 做完运动脊椎中间痛怎么办? 阴虛阴虚火旺怎么办 脸一躺下就丑怎么办 身体淤堵的厉害怎么办 怀孕晚期脚肿了怎么办 宝宝感冒咳嗽流鼻涕流泪怎么办 孕晚期睡觉习惯面朝右怎么办 鼻涕一直不停的流怎么办 宝宝一直流清鼻涕怎么办 感冒了眼睛酸胀流泪怎么办 五个月宝宝感冒流鼻涕怎么办 六个月宝宝感冒流鼻涕怎么办 一岁宝宝感冒咳嗽流鼻涕怎么办 七个月宝宝感冒流鼻涕咳嗽怎么办 孩子握笔姿势不正确怎么办 走久了脚底板痛怎么办 不会给宝宝拍嗝怎么办 打了肉毒素淤青怎么办 新生儿一吃母乳就睡觉怎么办 10岁半宝宝缺钾怎么办 宝宝吃不到乳晕怎么办 喂母乳乳头破了怎么办 宝宝吸了乳头痛怎么办 喂母乳奶头很疼怎么办 孩子吸的乳头痛怎么办 新生儿一直睡觉不吸吮怎么办 新生儿光睡觉不吃奶怎么办 婴儿不吸母亲的奶怎么办