讲道理这场cf本来是不想打的,因为感觉时间有点晚(主要还是国庆作业爆表了)。。后来不知道为什么还是决定打了。
开场前发现注册人数又8000+,(为什么我一打比赛就8000+啊)
挂了个vpn冷静一下。
开场看A,直接看样例,大概就是统计B的段数和每段的长度吧,很快打完了。然而不知道在想些什么一直在强迫症改输出格式(就是行末空格)晚交了一些,A掉的时候已经4min了。
交完同时打开了B,发现B并不能直接通过样例看题意了,只能开一个百度翻译加快速度,看完题后几min就A掉了。大概就是找一个串按长度排序后最前后最后放在哪里然后根据它的要求输出时间就好了吧。
然后看C题,发现是一个记搜sb题,但是时空复杂度都是5000*5000的,感觉好虚啊,不过时限并不是1s。。算了一下空间大概要200M,再看空间限制256M。。。。真是多开一个数组就要翻车的节奏啊。。
然后就被样例鏼死了。结果发现我加边的时候忘记加长度了囧。。结果都是0然而还能过前2个样例。。。
看了下D题,题面还是很清楚的,就是给定x,然后有k次操作,每次可以指定一个数+x或-x,然后使乘积最小。
这道题目套路还是比较清楚的,就是先看能不能变负数,然后每次选绝对值最小的把它绝对值+x就好了。分情况讨论一下就好了,还有有0的情况好蛋疼啊。。。
然后就剩E题了,E题就是给你n个区间,每次可以选择接下去走p的长度,或者先跳过>=t(t给定)的长度再走p的长度。要求走的全程都在某个区间内部。保证区间不会相交。
一开始觉得是sb题能走就走,不能走就跳t,打完以后发现比A题还短,感觉不是很清真。。。后来想到当t很大的时候这个做法就萎掉了。。然后感觉就不会做了。
显然这个是要一个区间一个区间考虑的吧,猜想令f[x]表示到x区间最右端点最多走几步,g[x]表示达到f[x]最左边的点事多少。然后对于一个区间,找它之前所有走t步可以调到它里面的更新就好了;第二种情况就是找它之前跳t步也在左端点之前的,那就当成跳t步调到左端点。转移是均摊O(N)的。
写完感觉很资瓷,交上去就一路跑,结果:
wrong answer on pretest 14
估计是一个比较大的点了,看了一下很多人都wa这个点。。
一时想不出来这个做法有什么问题,然后就锁了B题去hack,发现一个小哥用了白痴方法居然过了pretest。。更可怕的是有人叉他还失败了哈哈。随手造一组数据,然后就成功了。
看了一下div2还没有人AK,于是打算洗洗睡了,结果突然冒出一个AK的。。。于是决定多想想。
思考了一下我这个做法,发现好像是有点问题,就是有可能f[x-1]>f[x],或者f[x-1]=f[x],g[x-1]<g[x],这样的话第二种情况的更新就gg了,这个时候只剩2min多了,加上用f[x-1]更新f[x]后交上去,还剩1min30s,cf卡住了。。。这个时候我真的只希望能交上去就好了,别管过不过了。
离开电脑溜达了一圈,回来发现:
Accept
就是这么轻易!!去看standing发现被压了几十分,很不高兴。。
不管怎么样虽然E题的做法我也不知道对不对但是应该上div1没问题了吧。
-------------------------------------------------------------------------------------------------------------
第二天早上起来发现昨天rk1的D题fst了,然后我就rk1了哈哈。。。
rating居然只加200+,不幸福。本来以为可以击穿紫名的,结果黄名要2200,(诶还是too young啊)
by lych
2016.10.1