CSP2021总结
普及组
T1 分糖果:
题目大意:在[l,r]中找一个数,使其除n余数最大
做法:r-l>=n则输出n-1,不然的话就判断一下[l,r]有没有覆盖mod n为n-1的数。有的话就输出n-1,没有的话就输出r mod n
T2 插入排序:
题目大意:给一个数组a,有两种操作:第一种是将ax修改为v,第二种是求数组按插入排序排序后ax在新数组中的位置。第一种操作次数不超过5000。
做法:将原数组和修改的数字放在一起离散化,放在数状数组中。操作一时在数状数组上修改,操作二时用数状数组看这个数现在的下标是第几个。时间复杂度是 O((n+q) log(n+q))。
不过,直接排序后操作一插入排序修改、操作二O(1)询问也是可以的,时间复杂度O(n log n +n*q1),q1为操作一的数量(q1<=5000)。虽然最大会是四千万, 但是拉不满,而且有O2优化,应该是可以过的。
T3 网络连接:
题目大意:有n台计算机,有服务机和客户机。如果服务机或客户机提供的地址串不规范,这条操作将被忽略。不允许两台服务机使用相同的地址串,不然后一台 服务机会无法建立连接。如果某台客户机在尝试加入连接时与先前某台服务机提供的地址串相同,这台客户机就加入连接,不然则认为这台客户机无法加入连接。
做法:合法服务机放入数组,合法客户机在合法服务机中二分查找是否有对应的。
T4 小熊的果篮:
题目大意:给一个长度为n的01串,连在一起的同一个数称为一个块,每次取块中最左的一个数将其删除。若一个块删完了且左右两个块的数字相同就将其合并为 一个块。求每次删除的数字的原来的下标。
做法:并查集查找每个数所在块中最右边的数,用链表存储每个数下一个数的位置。每次在链表上删除一个块最左边的数,在跳转到该块中最右边的下一个位置继 续删除。在判断一个块是否全部删完,删完的话就判断一下前后两个块是否同色,是的话就将前一个块的最右边的fa修改为后一个块的最右边的数的位置。 这题我打挂了,细节有点多,应该先删点在连接两个数字相同的块。
总结
这次考试相对于之前来说相对简单。做前几道题时做得还比较顺利,不过在打代码时花的时间比较多,导致最后一题没有时间调试,大数据没过。以后在做前几道题时应做得快一些,要为最后的几道题留足够的时间。
提高组
待更新…