Codeforces1066(Div3)Part.1

我发现我的水平根本不高,有些想法和思路则根本没有

就连第一道水题都有些吃力,所以这次我要收集一下Codeforces的Div3的题目,全部都做一遍

这里选择的是最近的codeforces 1066 上的题目

第一题

1066 A

1-L长度,每隔v个位置有一个标志,在l-r之间看不到标志;

计算你能看到的标志;

基本上就是一个数学问题,然而我在l-r上区间磨蹭了半天

现在总结一下就是,L/v是总标志个数

还要计算看不到的标志个数,用l-r的区间不好计算,我们用1-r减去1-l-1的标志个数就ok了

也就是r/v-l/v

****l-1是计算l左侧的区间,如果要计算l-r不能包括l

1066B

这道题是一道贪心的题目,我还没有解决,回头单独列出来

1066C

这道题目讲的是一个书架L,R不断插入书

然后找书时输出该书左侧书的数目和右侧书的数目中的min

关键如何查询用线性查询必定超时,所以必须要去用数据去维护ta

看到别人的blog中讲述到的维护数值,将查询时间降到O(1),真的觉得别人好聪明,我大概是个傻子

维护方式是这样的:

首先将L和R的下标取一个较大的数值,同时去维护ta,l=R-1;(左右要相邻)

当你左侧插入式,将某书id标记为L,同时L--(维护左侧下标,L,R都为侧边没有书的编号)

同理,右侧Id标记为R,R++;

这时候每个数目都有一个Id,因为没有删除的操作,所以是一个静态,Id一旦标记,不需要更改,下标只需要维护最侧下标即可

输出时,将某ID的标记位置与最左侧下标和最右侧下标进行相减,(别忘了-1,因为L,R的位置并没有书)

最后输出小的那个值

猜你喜欢

转载自www.cnblogs.com/rign/p/9972951.html