Loading

2021CSP-J2总结

2021CSP-J2总结

昨天上午参加了CSP-J,虽然是第二次,但感觉三、四都挂了。。。。

T1

题目大意

给定n,l,r,求$[l,r]$中选出一个整数$mod$ $n$所能得的最大余数。

思路

不是很难。。$O(1)$很明显

T2

题目大意

给定长度为$n$($n\leq8000$)的序列,有一系列修改与查询操作

修改:修改第$x$个数的值

查询:查询对序列进行插入排序后原序列第$x$个数排序后所在位置

设修改$m$此,保证$m\leq5000$

思路

刚开始没看到修改次数限制,觉着是什么数据结构或者cdq分治能不能做(有病啊,这是J组!!!)

题目中给出了插入排序的代码,实际上第二层就是将每个元素插入到它应在的位置。而对于有序序列,改变一个数时,其他元素相对顺序不变,所以只要$O(n)$将修改的元素插入就行了

不过序列中有重复元素,而通过初赛复习题目中代码,其保证原数组中靠前的元素,在排序后也靠前

由于我开始时$sort$了一遍,时间复杂度为$O(n(logn+m))$

T3

题目大意

有一系列服务机创建及客户机加入的请求,问能否成功,其中:

若申请地址不合法,输出"$ERR$"

若服务机申请地址已存在,或客户机申请地址不存在,输出"$FAIL$"

否则,服务机申请输出"$OK$",客户机输出所连服务机编号

思路心路历程

后两条$map$就行了,所以开心地打第一条

卡在第三个样例上,经过仔细地读题,发现忘了前导$0$

过了样例后就下一题了,回家后才想起我写的玩意在多个前导$0$时会挂。。。(悲伤.jpg)

T4

题目大意

给定一个$01$序列,其中一连串相同数字称为一个“块”。每次同时取出每个块的最左元素,而两个数字相同的块在中间元素取完后合并为一个块,为每次取出的为那些元素

心路历程

删除操作,链表!。。。不知道咋就放弃了

合并,并查集!。。。不知道又咋就放弃了

然后写了个$O(初始块数^2)$的方法。。

人眼对了前俩样例,结果第三个样例直接$fc$挂了。。调了一会发现我的输出行末有空格。。。

最后七分钟想了个$O(块数log块数)$的用线段树的方法,没打了。。

$Conclusion$

说实话,发挥得不如去年(虽然去年没啥可发挥的),一等应该有希望。。

posted @ 2021-10-24 22:58  complexor  阅读(390)  评论(0编辑  收藏  举报