记2018.2.27 NOIP班-数据结构(9)

t1:
题意简述:给你 n 个线性函数 fi=kix+bi ,支持单点修改和区间查询 fr(fr1(fl(x)))mod (109+7)
然后看了题目我就想是个线段树咯,推了一下发现 fr(fl(x))=(kl+kr)x+bl×kr+br 也是一个线性函数,然后又满足结合率嘛就是区间加法。然后就套了个线段树板子调了调一遍过了。
注意点:模的细节注意下,然后写struct的时候一定要记得写构造函数啊这是个好习惯。
source:FJWC2016
t2:
题意简述:给你 n 个字符串,定义两个字符串相似为去掉相同一位后相等,求相似的对数。
然后第一想法就是枚举删除的位数然后寻找相等对数嘛。。。寻找的方法当然是字符串排序,于是肯定TLE啊。
我们发现字符串排序太复杂了,于是我们把字符串哈希后再去处理就行了。
注意点:哈希了以后一定要记得模啊不模的话开个long long也行啊反正别int真的太容易被卡了。。。
(我就是开int才30开了long long也没模就ac了)
source:CTSC2014
t3:
题意简述:给你一个长度为 n 的排列 P ,求有多少连续的从 l r 的正整数可以表示为 P 里面两段连续区间并。
然后看了下题目不会做啊,,,写了个五方的暴力。。后来发现可以写一个平方的暴力然后来不及就错了。。
正解还不会就下次补题解吧,讲讲暴力的做法。
可以观察到题目问的是有多少区间 [l,r] 满足题意,因此我们考虑枚举区间 [l,r] ,然后判断其在 P 中是否为两个(或一个)区间,这样的复杂度是 O(n3) 的,也只有 10 分。但是由于我们枚举的时候,其实是在确定 l 的情况下,将 [l,r] 不断从右侧加入一个数,因此我们可以维护一个bool数组表示 [l,r] 中的数字在 P 里出现在那些位置。然后每加入一个数时,判断其两侧的数,如果两侧的数都不存在则段数 +1 ,都存在段数 1 ,否则段数不变。最后统计段数小于三的区间 [l,r] 即可。复杂度 O(n2)
source:FJWC2017

猜你喜欢

转载自blog.csdn.net/night2002/article/details/79398839