本文从WordPress迁移而来, 查看全部WordPress迁移文章
A:要满足题目的条件,其实就是重复着放就可以了,所以x,y,z的个数不能相差太远,两个种类的字母的个数不能大于等于2,如果单词长度小于等于2,直接yes,所以问题转化为怎么计算一个区间内xyz的个数,用线段树或者树状数组
1 |
|
1 |
|
1 | def check(cnt): |
B:其实就是统计B中每个数字有多少个,然后在A中去找。找的时候我是把A分成了P个系列,意思就是
第1个系列:a[1],a[1+p],a[1+2p]…..
第2个序列:a[2],a[2+p],a[2+2p]….
第p个系列:a[p],a[2p],a[3p]
这样分是因为对于一个系列,我们可以较快地统计出来,因为在一个系列里我们先拿了m项,然后统计,然后删除一个头添加一个尾,这样就可以一直推下去,这样整个A序列中每个元素也只能被操作一次。
至于统计,A中的数字如果在B中就+1,消掉了就减1,没有的话就忽略,但是还有些细节就不说了。最后的答案记得排序再输出。一开始纯手写,比较长,跑得还可以,后来用map写,代码短了,速度稍慢些,只贴出map的代码
1 |
|