bzoj3462DZY Loves Math II

数据范围:$$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的更多相关文章
- bzoj 3462: DZY Loves Math II
3462: DZY Loves Math II Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 211 Solved: 103[Submit][Sta ...
- [bzoj3462]DZY Loves Math II (美妙数学+背包dp)
Description Input 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inp ...
- BZOJ3462 DZY Loves Math II(动态规划+组合数学)
容易发现这是一个有各种玄妙性质的完全背包计数. 对于每个质数,将其选取个数写成ax+b的形式,其中x=S/pi,0<b<x.那么可以枚举b的部分提供了多少贡献,多重背包计算,a的部分直接组 ...
- BZOJ 3462 DZY Loves Math II ——动态规划 组合数
好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...
- BZOJ3462 DZY Loves Math II 【多重背包 + 组合数】
题目 输入格式 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. 输出格式 输出共 q 行,分别为每个询问的答案. 输入样例 30 3 9 29 1000000 ...
- bzoj3462: DZY Loves Math II
状态很差脑子不清醒了,柿子一直在推错.... ... 不难发现这个题实际上是一个完全背包 问题在于n太大了,相应的有质数的数量不会超过7个 假设要求sigema(1~plen)i pi*ci=n 的方 ...
- DZY Loves Math II:多重背包dp+组合数
Description Input 第一行,两个正整数 S 和 q,q 表示询问数量.接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inpu ...
- DZY Loves Math II
简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...
- [BZOJ] DZY Loves Math 系列 I && II
为了让自己看起来有点事干 ,做个套题吧..不然老是东翻翻西翻翻也不知道在干嘛... \(\bf 3309: DZY \ Loves \ Math\) 令 \(h=f*\mu\) 很明显题目要求的就是\ ...
随机推荐
- node.js ----NPM使用介绍
NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从 ...
- mybatis性能优化之降低数据库连接
做性能优化的最重要的功能就是降低数据库的交互.非常多程序猿一般在开发的时候仅仅考虑简单的实现功能,无论业务简单复杂,仅仅要实现即可. mybatis有个重要的功能就是考虑在联合查询时技巧: <? ...
- javascript的slice(),splice(),split(),substring(),substr()
例子摘抄于http://www.w3school.com.cn/jsref/jsref_obj_array.asp 1.slice(): Array和String对象都有 在Array中 slice ...
- HDU 3461 Code Lock(并查集的应用+高速幂)
* 65536kb,仅仅能开到1.76*10^7大小的数组. 而题目的N取到了10^7.我開始做的时候没注意,用了按秩合并,uset+rank达到了2*10^7所以MLE,所以貌似不能用按秩合并. 事 ...
- NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
ORuM思想浮出 对于ORM(Object Relational Mapping)我们太熟悉了,可是我们从还有一个角度能够想象出ORuM(Object Relational un-Mapping)的思 ...
- 数据挖掘之Slope One
计算偏差: card() 表示集合包含的元素数量. http://www.cnblogs.com/similarface/p/5385176.html 论文地址:http://lemire.me/fr ...
- VIM中保存编辑的只读文件
如何在VIM中保存编辑的只读文件 你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限.如果已 经做了很多修改,放弃保存的确很懊恼, ...
- Erlang 在erlang项目中使用protobuf
protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信.文章将着重介绍在erl ...
- linux 安装mongo
在Linux中安装Mongodb操作说明 MongoDB配置 版本说明:因本机所装Red Hat 为 64位操作系统故本例以64位的MongDB为例.所用版本如下: (1) Red Hat En ...
- Flask,ORM及模板引擎Jinja2
跨域:http://blog.csdn.net/yannanxiu/article/details/53036508 下载flask_cors包 pip install flask-cors 使用fl ...