数据范围:$$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. openstack 用nova API 指定 compute node 创建 instance

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  2. An easy to use android color picker library

    https://github.com/xdtianyu/ColorPicker

  3. 【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单

    硬件说明: 操作系统:OpenWRT 网卡:AR9220R52Hn 网卡驱动:ath9k OpenWRT在刷机完成之后,并不会自动开启无线功能,需要手动修改配置文件,然后重启网络服务.管理无线功能的配 ...

  4. Zend API:深入 PHP 内核

    Introduction Those who know don't talk. Those who talk don't know. Sometimes, PHP "as is" ...

  5. 继承ViewGroup类

    Android中,布局都是直接或间接的继承自ViewGroup类,其中,ViewGroup的直接子类目前有: AbsoluteLayout, AdapterView<T extends Adap ...

  6. Spring属性编辑器详解

    1.常见的属性的注入:int,string,list,set,map 2.什么是属性编辑器及作用? (1)将spring配置文件中的字符串转换为相应的java对象 (2)spring内置了一些属性编辑 ...

  7. .net 平台下的AI框架

    Aforge.net之旅——开篇:从识别验证码开始 基于AForge.Net框架的扑克牌识别 人工神经网络入门(4) —— AFORGE.NET简介 .NET开源工程推荐(Accord,AForge, ...

  8. sqlite与sqlserver区别

    1.查询时把两个字段拼接在一起 --sqlserver-- select Filed1+'@'+Filed2 from table --sqlite-- select Filed1||'@'||Fil ...

  9. windowsphone8.1学习笔记之应用数据(一)

    数据存储分为两种:云存储和应用数据(即本地存储),wp中的应用数据分为两种,一种是应用设置:一种是应用文件.wp的数据相关都是通过ApplicationData来实现,一个程序只有数据存储区. 先说应 ...

  10. mongo 数据库提前关闭 避免读写任务没有结束,异步任务没有完成,同步指令提前关闭数据库:'MongoError: server instance pool was destroyed'

    mongo 数据库提前关闭 // mongodb - npm https://www.npmjs.com/package/mongodb const mongoCfg = { uri: 'mongod ...