时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
这一天咩栗与大白狗去吃海底捞,海底捞服务员告诉他们,海底捞推出来一个新的活动。
海底捞给他们提供了一张地图.
上面包含了N家海底捞,编号从0到N-1,和M条可以连接两个海底捞店的路,和每家店的开业时间为t。(出题人没见过只能单向的路)
并且提供了一条很长很长的字符串S和ST条比较短的字符串Si。短的字符串是从0到ST-1编号的。
然后让呜米说Q次,每次说三个数字 ,第一个数字代表店 x ,第二个数字代表店 y,第三个数字代表时间 t 。
求出 t 时间 x 店到 y 店之间最短的路径长度LEN,用LEN%ST的结果取出编号相同的Si字符,Si字符串在长字符串S内出现的次数,会被记录下来。
如果 t 时间的时候x店或者y店没有开业或者t时间x店与y店还不能互通,就视为不能互相到达,会记录下-ST。(负的ST)
需要中转才能互通或者可以通过中转减少最短距离的情况下,只能在t 时间以及之前,已经开业的店可以进行中转。
最后把记录下的数字加起来,如果大于R就可以免单。
请问记录下的数字加起来是多少,能不能免单?
注:
aaa
aa
算aa出现两次
ababa
aba
算aba出现两次
而且S和Si只存在小写字母
输入描述:
第一行五个整数 N M ST R Q
第二行N个整数 t 保证t不降
第三行一个字符串S
接下来ST条字符串Si
接下来M行每行三个整数x,y,w ( x到y距离w)
接下来Q行每行三个整数x,y,t 保证t不降
输出描述:
输出两行
第一行能不能免单 能YES 不能NO
第二行一个整数 记录下的数字加起来是多少
示例1
输入
复制
4 5 5 20 4
1 2 3 4
aaaaaaaaa
a
a
a
a
a
2 3 1
0 2 1
2 1 4
0 3 5
3 1 2
0 1 2
2 1 3
0 1 3
0 1 4