hdu 6287 口算训练

题意:

小Q非常喜欢数学,但是他的口算能力非常弱。因此他找到了小T,给了小T一个长度为n n的正整数序列a 1 ,a 2 ,…,a n a1,a2,…,an,要求小T抛出m m个问题以训练他的口算能力。

每个问题给出三个正整数l ,r ,d l,r,d,小Q需要通过口算快速判断a l ×a l +1 ×…×a r −1 ×a r al×al+1×…×ar−1×ar是不是d d的倍数。

小Q迅速地回答了出来,但是小T并不知道正确答案是什么,请写一个程序帮助小T计算这些问题的正确答案。

思路:

一开始bit套map 用前缀和处理,tle了?

对于每一个输入的数字,分解质因子,对于每一个质因子,把这个数字的位置push到这个质因子的vector里面去。

那么每一个vector里面的数字就是非递减的了。

然后对于每一个输入的l,r,d,把d分解质因子,对于每一个质因子,在这个质因子的vector里面找第一个大于等于l的位置和最后一个小于等于r的位置,相减,比较是否有d中这个质因子的数量多。

找的时候当然利用前面的非递减,所以可以二分。

代码:

Original: https://www.cnblogs.com/kickit/p/9165166.html
Author: qrfkickit
Title: hdu 6287 口算训练

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/604402/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球