集训Day1

雅礼集训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

w 为两字符串,定义:

  1. $w[l,r]$  表示字符串 $w$ 在区间 $[l,r]$中的子串;
  2. $w$ 在 $s $中出现的频率定义为$w$ 在 $s$  中出现的次数;
  3. $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

感觉拿了个大众分?

猜你喜欢

转载自www.cnblogs.com/Kong-Ruo/p/9141443.html