数据范围:$$2 \leq S \leq 2 * 10^6$$

$$1 \leq n \leq 10^{18}$$

$$ 1 \leq q \leq 10^5$$

数学+dp

题解写一年系列...

观察一下原题,

(1)因为每个$p_i$必须出现,所以我们可以把$n$减去$\sum p_i$来转化为每个$p_i$可以不出现

(2)根据$S$的范围,我们发现$k$不超过$20$(实际上不会超过$7$)

(3)$S$中不会含有完全平方因子

(4)事实上,我们拆出来的式子一定是形如$$\sum p_i * c_i=n$$

每个$p_i$都是$S$的因数 所以$p_i * c_i$得到的结果一定是$X \cdot S + Y \cdot c_i$

把$c_i$分成$a_i=c_i/(S/p_i),b_i=c_i mod (S/p_i)$

枚举$m$,$p_1*b_1+p_2*b_2+...+p_k*b_k=n-m*S$

这个可以用背包的方式预处理,剩下的可用插板法得到

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL yyc = 1e9+;
const LL maxn = 2e6+;
LL dp[][maxn << ];
LL orz[],cnt;
LL s,n,q;
inline LL ksm(LL a,LL b)
{
LL res=;
while(b)
{
if(b&)(res*=a)%=yyc;
(a*=a)%=yyc;
b>>=;
}
return res;
}
inline LL C(LL n,LL m)
{
n++,m--;n=n+m-;
LL res=;
for(LL i=n;i>=n-m+;i--)
res=(res*(i%yyc))%yyc;
for(LL i=;i<=m;i++)
res=res*ksm(i,yyc-)%yyc;
return res;
}
LL solve()
{
LL now=,pre=;
memset(dp[now],,sizeof(dp[now]));
dp[now][]=;
for(LL i=;i<=cnt;i++)
{
now^=,pre^=;memset(dp[now],,sizeof(dp[now]));
LL bou=s/orz[i]-;
for(LL j=;j<orz[i];j++)
{
LL sum=;
for(LL k=;k <= (s*cnt-j)/orz[i];k++)
{
sum+=dp[pre][k*orz[i]+j];sum=sum%yyc;
if(k >= bou+)sum-=dp[pre][(k-bou-)*orz[i]+j];
dp[now][k*orz[i]+j]=sum;
}
}
}
return now;
}
int main()
{
scanf("%lld%lld",&s,&q);LL x=s;
LL len=sqrt(s);
for(LL i=; i<=len;i++)
{
if(s%i == ) s/=i,orz[++cnt]=i;
if(s%i == )
{
while(q--)puts("");
return ;
//huaji
}
}
if(s>)orz[++cnt]=s;s=x;
LL now=solve();
while(q--)
{
LL res=;
scanf("%lld",&n);
for(LL i=;i<=cnt;i++)n-=orz[i];
if(n < )
{
puts("");
continue;
}
LL m=n/s,k=n-m*s;
for(LL i=;i<=min(m,cnt);i++)
res=(res+dp[now][i*s+k]*C(cnt+m-i-cnt,cnt%yyc)%yyc)%yyc;
printf("%lld\n",(res+yyc)%yyc);
}
}

丑陋的卡时代码

bzoj3462DZY Loves Math II的更多相关文章

  1. bzoj 3462: DZY Loves Math II

    3462: DZY Loves Math II Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 211  Solved: 103[Submit][Sta ...

  2. [bzoj3462]DZY Loves Math II (美妙数学+背包dp)

    Description Input 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inp ...

  3. BZOJ3462 DZY Loves Math II(动态规划+组合数学)

    容易发现这是一个有各种玄妙性质的完全背包计数. 对于每个质数,将其选取个数写成ax+b的形式,其中x=S/pi,0<b<x.那么可以枚举b的部分提供了多少贡献,多重背包计算,a的部分直接组 ...

  4. BZOJ 3462 DZY Loves Math II ——动态规划 组合数

    好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...

  5. BZOJ3462 DZY Loves Math II 【多重背包 + 组合数】

    题目 输入格式 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. 输出格式 输出共 q 行,分别为每个询问的答案. 输入样例 30 3 9 29 1000000 ...

  6. bzoj3462: DZY Loves Math II

    状态很差脑子不清醒了,柿子一直在推错.... ... 不难发现这个题实际上是一个完全背包 问题在于n太大了,相应的有质数的数量不会超过7个 假设要求sigema(1~plen)i pi*ci=n 的方 ...

  7. DZY Loves Math II:多重背包dp+组合数

    Description Input 第一行,两个正整数 S 和 q,q 表示询问数量.接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inpu ...

  8. DZY Loves Math II

    简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...

  9. [BZOJ] DZY Loves Math 系列 I && II

    为了让自己看起来有点事干 ,做个套题吧..不然老是东翻翻西翻翻也不知道在干嘛... \(\bf 3309: DZY \ Loves \ Math\) 令 \(h=f*\mu\) 很明显题目要求的就是\ ...

随机推荐

  1. node.js ----NPM使用介绍

    NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从 ...

  2. mybatis性能优化之降低数据库连接

    做性能优化的最重要的功能就是降低数据库的交互.非常多程序猿一般在开发的时候仅仅考虑简单的实现功能,无论业务简单复杂,仅仅要实现即可. mybatis有个重要的功能就是考虑在联合查询时技巧: <? ...

  3. javascript的slice(),splice(),split(),substring(),substr()

    例子摘抄于http://www.w3school.com.cn/jsref/jsref_obj_array.asp 1.slice(): Array和String对象都有 在Array中  slice ...

  4. HDU 3461 Code Lock(并查集的应用+高速幂)

    * 65536kb,仅仅能开到1.76*10^7大小的数组. 而题目的N取到了10^7.我開始做的时候没注意,用了按秩合并,uset+rank达到了2*10^7所以MLE,所以貌似不能用按秩合并. 事 ...

  5. NHibernate3剖析:Mapping篇之ConfORM实战(1):概览

    ORuM思想浮出 对于ORM(Object Relational Mapping)我们太熟悉了,可是我们从还有一个角度能够想象出ORuM(Object Relational un-Mapping)的思 ...

  6. 数据挖掘之Slope One

    计算偏差: card() 表示集合包含的元素数量. http://www.cnblogs.com/similarface/p/5385176.html 论文地址:http://lemire.me/fr ...

  7. VIM中保存编辑的只读文件

    如何在VIM中保存编辑的只读文件 你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限.如果已 经做了很多修改,放弃保存的确很懊恼, ...

  8. Erlang 在erlang项目中使用protobuf

    protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信.文章将着重介绍在erl ...

  9. linux 安装mongo

    在Linux中安装Mongodb操作说明 MongoDB配置 版本说明:因本机所装Red Hat 为 64位操作系统故本例以64位的MongDB为例.所用版本如下: (1)    Red Hat En ...

  10. Flask,ORM及模板引擎Jinja2

    跨域:http://blog.csdn.net/yannanxiu/article/details/53036508 下载flask_cors包 pip install flask-cors 使用fl ...