Problem
给你n个数$a_{1…n}$,问你这n个数用加法组成的所有数中∈[1,p]的数的个数。
询问有m次。每次询问给定一个 $p_i$
$n<13,m<1e6,p_i<1e18,a_i<5e5$
solution
大家可以先去看一下这道题(本题的前一部分) 传送门
设Min为$a_i$中的最小值。
所以,我们对于任意数x,若x可以被表示,$x+a_i×k$均可以被表示。
所以我们要求出余数$x∈[0,Min)$被表示所需的最小值。
考虑最短路
对于$x∈[0,Min),连接x与x+a_i$,边权为$a_i$
然后就可以跑dijkstra。
对于每一个询问.
然后就可以愉快的拿到50分了。
打成这样竟然只给50,这部分分给的
好了,现在要考虑询问之间的转移。
第一个想到前缀和优化。
但是,怎么优化呢?
给p数组和dis数组从小到大排个序。
然后将p表示成$s×Min+t$的形式,$dis_i$表示成$d×Min+c$的形式。
这样的话
好啦,这样就可以用前缀和+树状数组优化了。
1 |
|