雅礼集训2017Day1的题
感觉上不可做实际上还挺简单的吧
T1
区间加 区间除法向下取整
查询区间和 区间最小值
大力上线段树,把除法标记推到底,加法标记就是按照线段树的来
先拿30
然后60的数据随机不知道该怎么做
开始YY
那个“向下取整”的tag并不能累加
所以考虑转化
除法->减法
如果一个区间要减的都是一样的数,直接减就行了,如果不一样,就递归下去,反正1个数肯定减的是一样的
本来想拿60,结果A了
T2
n*n的棋盘(n = 1000)每次把找一行,把它的颜色序列copy下来涂到一列上
问最少多少次能把整个棋盘涂黑
首先 全白肯定无解
其次 只要把一行涂黑 之后涂n次就可以了
然后 大力模拟发现并没有比这个优的策略
于是一顿乱搞
我们枚举第i行,假装要把他弄成全1的。
设第i行的0的数量为cc[i],那么考虑第i列是否含有1,如果含有1那么就可以用含有1的那列的那行给第i行所有0的地方赋值,需要cc[i]步。
如果第i列不含有1,我们要花1次操作给第i列搞个1出来,所以答案是cc[i]+1步。
每行取个min
听说是签到题...数据极水 被各种对的不对的做法爆切
T3
令 s 与 w 为两字符串,定义:
- $w[l,r]$ 表示字符串 $w$ 在区间 $[l,r]$中的子串;
- $w$ 在 $s $中出现的频率定义为$w$ 在 $s$ 中出现的次数;
- $f(s,w,l,r)$表示 $w[l,r]$ 在 $s$ 中出现的频率。
比如 $f(ababa,aba,1,3)=2$。
现在给定串 $s$,$m$个区间 $[l,r] $ 和长度 $k$ ,你要回答 $q$ 个询问,每个询问给你一个长度为 $k$ 的字符串 $w$ 和两个整数 $a,b$,求:
$\sum\limits_{i = a} ^ b f(s, w, l_i, r_i)$
重要条件
$\sum w_i$ 是个定值
所以很eazy看了题解后想到要写两种做法
首先考虑k小的情况
这种情况我们可以用SAM暴力处理出right集合计算每一个子串在当前串出现的次数
k大时可以考虑在SAM的parent树上跑一个倍增
暴力记前缀然后倍增往上跳找到后缀
这样遍历每个子串就可以做了
这是什么完全不可做的毒瘤题啊妈妈带我回家吧我不学OI了
嗯 抬头 微笑
感觉没看到签到题有点亏...想T1想了2个小时有点不应该
然后1个小时迅速切T2
T3就没时间想了只能n^3的KMP
最后100 + 100 + 30
感觉拿了个大众分?