Sweety

Practice makes perfect

导航

多校联合集训(汇总)

Posted on 2017-05-02 21:01  蓝空  阅读(133)  评论(0编辑  收藏  举报

结果

题目编号

标题

题解

正确

提交

Y

1001

字符串

 here

93

265

Y

1002

小婷婷吃蘑菇

 水题

139

361

Y

1003

瑞神要考研

 here

87

300

Y

1004

有解吗?

 水题

110

412

N

1005

琐碎的区间

 here

24

128

Y

1006

小明与隔壁老王之间不得不说的故事

 水题

127

363

Y

1007

数字逻辑练习题

 here

48

283

Y

1008

Envy

 here

61

310

Y

1009

失恋的小 T

 here

70

167

N

1010

求个最大值

 here

48

248

 

 A 字符串“水” 题
首先预处理出一个 prefix 数组,prefix[i]最低二进制最位为 0 表示 a 字符在[1..i]中出现了偶数次,反之奇数次,其他二进制位为含义以此类推。这样以 i 开头的偶串个数就是prefix[i...n]中和 prefix[i - 1]相等的数个数,这样倒着扫一遍 prefix 数组,把扫过的 prefix加入到一个 map 里就好了,时间复杂度 O(nlogn)。
B 小婷婷吃蘑菇
水题,贪心就行了。
C 瑞神要考研
直接根据题意进行链表模拟即可。
D 有解吗?
水题。
E 琐碎的区间
本题的重点在于开根号操作的处理。观察过后不难发现一个现象,对于一个区间开根号,所有的数都会不断地相互趋近。而趋近到一定程度之后,这个区间所有的数开根号
取整就会相同,这样就可以直接打一个 lazy 赋值标记。 要实现上述过程,就要维护一个区间最小值和一个区间最大值,当最大最小值开跟取整相同时就可以之接打 lazy 标记赋值,否则就分作两个子树处暴力理。 而暴力处理的次数不会太多的,1e5 以内的数开跟 5 次就可以相等。这样就比较高效的解决了这个问题。
F 小明与隔壁老王之间不得不说的故事也许是隔壁老王的水题。
G 数字逻辑练习题
这个题就是直接根据定义模拟即可。
H Envy
本题的一个做法可以将所有数字离散化,然后用线段树维护一下即可,也可以用单调栈
做。
I 失恋的小 T
这道题的原形是 URAL 1590
http://acm.timus.ru/problem.aspx?space=1&num=1590
题意简化后是:给你一个字符串,问这个字符串有多少个不同的字串,这道题第一眼看暴力可做,哈希可做,字典树可做,所以很容易马上试一发,但是仔细算算复杂度和内存是过不了的。 首先想到的是字典树,把所有的字串插入到字典树中,最后输出一共有多少树的节点即可,但是这样会超内存。然后想到了字典树的左儿子右兄弟表示法,可以节省内存,然而这样每次查找儿子的时候需要遍历一遍儿子链表,导致 TLE。 然后想到了哈希,这样就不会超时了,求出哈希表来之后,只有 n2 的复杂度,然而这样塞进一个 set 里面也会超时。于是想到了先放进 vector 再排序去重,可以减少一定时间,然而这样 vector 就存不下了,MLE。 直到最后才想到了后缀数组,知道了后缀串字典序排序,求出 height 数组来之后,就可以知道每个后缀与前一个后缀的最长公共前缀。这样最后统计求和一下就可以了。需要注意刘汝佳的模板使用的时候字符串后面需要补’ $’ 后缀数组也算是字符串处理中的神器了,经常和 RMQ 结合使用,建议大家学会。
J 求个最大值
排序去重之后,对 1 到 max{ai}中的每个数字 j 求出小于 j 的最大 ai,记为 bj。 对于每个 ai 枚举它的倍数即可,时间复杂度 O(max{ai} + nlogn) 。