我发现我的水平根本不高,有些想法和思路则根本没有
就连第一道水题都有些吃力,所以这次我要收集一下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的位置并没有书)
最后输出小的那个值