2021CSP-J2总结
昨天上午参加了CSP-J,虽然是第二次,但感觉三、四都挂了。。。。
T1
题目大意
给定n,l,r,求$[l,r]$中选出一个整数$mod$ $n$所能得的最大余数。
思路
不是很难。。$O(1)$很明显
题目大意
给定长度为$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$