数据范围:$$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. 在C#中怎样推断线程当前所处的状态

    在C#中怎样推断线程当前所处的状态 老帅       在C#中.线程对象Thread使用ThreadState属性指示线程状态.它是带Flags特性的枚举类型对象.    ThreadState 为线 ...

  2. Mysql或者Hive数据行变成列

    对于mysql /  hive 再进行统计的时候假设须要行变成列,能够使用函数 CASE 字段a WHEN 值b THEN c [WHEN d THEN e]* [ELSE f] END 当字段a=值 ...

  3. Android_程序未处理异常的捕获与处理

    1.简单介绍 对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至server. 这里主要使用UncaughtExceptionHandler 2.代码实现 pu ...

  4. 【转载】【selenium+Python WebDriver】之selenium的定位以及切换frame(iframe)

    感谢CSDN:huilan_same大神 网页地址:http://blog.csdn.net/huilan_same/article/details/52200586

  5. python 基础 6.2 raise 关键字使用

    一. raise 关键字    raise 用来触发异常    语法如下:     raise[Exception [,args [,traceback]]]     语句中Exception 是异常 ...

  6. Unix环境高级编程—进程关系

    终端登录 网络登录 进程组 getpgrp(void) setpgid(pid_t pid, pid_) 会话: 是一个或多个进程组的集合,通常由shell的管道将几个进程编成一组. setsid(v ...

  7. ifndef/define/endif 和 #ifdef 、#if 作用和用法

    为了能简单的看看某些linux内核源码,复习了一下c语音,今天汇总了一下关于宏定义的相关内容: 一.ifndef/define/endif用法: .h文件,如下: #ifndef XX_H #defi ...

  8. EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案

    需求来源 紧急视频回传云端:即拍即传.云端存储.紧急录像.云拍云录!这些需求现在可能对于我们来说比较远,大部分也是在行业中才会用到,但相信在不就的将来肯定会落地到每个人的手中,因为这是一个自我保护.自 ...

  9. python文件读写方式

    window下换行\r\n linux.unix.mac下都是\n - 以二进制的形式wb写入,同样以二进制的方式读取rb ``` f = open('file name','wb') f.write ...

  10. about gnu bash shell

    1 定义字符串不需要引号 var=NONE echo $var ==>NONE 2 支持基本的整数计算 a=1 b=2 echo $((a+b)) ==>3 必须用$(()),双括号的形式 ...