理解前缀旋转操作:
每种前缀旋转操作将字符串的前 x_i 个字符移动到末尾,相当于将字符串向左移动 x_i 个字符。比如,x_i=2 操作会将前 2 个字符移到末尾,相当于将字符串左移 2 位。
目标:
对于每个查询,目标是将字符串循环左移 y_i 位,我们需要通过 x_1, x_2, ..., x_k 中的操作来组合出目标左移 y_i。
给出正整数 L,以及 p 种可用的前缀轮转:第 i 种会把串开头连续 ai 个符号挪到尾巴。每种轮转都能用任意多次(同一种 ai 允许反复用)。
对目标偏移 d(0≤d<L),约定目标串等于把原串循环左移 d 位(开头 d 个符号被挪到尾巴)。现有 q 次询问:每次给出偏移 di,求用上述前缀轮转把串变到该偏移最少要几次;变不到则输出 −1。
【名词解释】
开头那行写入三个整型值
L,p,q(1≤L≤5×104;1≤p≤100;1≤q≤105),依次为串长、可用轮转种数、询问次数;
第二行 p 个整数 a1,a2,…,ap(1≤ai≤L),即各前缀轮转的长度;
第三行 q 个整数 d1,d2,…,dq(0≤di<L),即各次询问的目标偏移。
对每次询问 di,按读入顺序单独一行打印一个整数:把 w 循环左移 di 位(开头 di 个符号挪到尾巴)所需的最少前缀轮转次数;达不到则打印 −1。
输入
7 2 4
2 5
0 2 4 1
输出
0
1
2
3
说明
本组数据含义如下:
偏移 0 :不用动手;
偏移 2 :使用 a1=2 一次;
偏移 4 :连续使用 a1=2 两次;
偏移 1 :使用 a2=5 三次,5+5+5≡1(mod7),共 3 次。
输入
8 2 4
4 8
0 4 2 6
输出
0
1
-1
-1
说明
本组数据里,仅 0、4 两个偏移能走到。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册