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\) 很明显题目要求的就是\ ...
随机推荐
- python for android : BeautifulSoup 有 bug
BeautifulSoup 善于网页数据分析 .可是 python for android : BeautifulSoup 有 bug , text = h4.a.text 仅仅能取得 None,因此 ...
- 《C专家编程》数组和指针并不同--多维数组
<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...
- STM32 I2C
STM32 I2C 搞了几天了,比较郁闷,写点东西给那些正在郁闷的同志 // 好使的,也是范例的代码 cnt = TIME_OUT; while (cnt-- && !I2C_Chec ...
- IOS-4-面试题1:黑马程序猿IOS面试题大全
一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统.因此多线程的底层实现机制是基于Mach的线程 3> ...
- 30天自制操作系统(三)进入32位模式并导入C语言
1 制作真正的IPL IPL(Initial Program Loader),启动程序装载器,但是之前并没有实质性的装载任何程序,这次作者要开始装载程序了. 虽然现在开发的操作系统啥功能也没有,作者说 ...
- redis问题接囧办法及经验
转自:https://my.oschina.net/freegeek/blog/324410 1.redis持久化,来自官方说明 如何选择使用哪种持久化方式? 一般来说, 如果想达到足以媲美 Post ...
- Git --恢复修改的文件
对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区. 对于修改的文件有两种情况: 只是修改了文件,没有任何 git 操作 修改了文件, ...
- Continuously Integrate
 Continuously Integrate David Bartlett THE Build AS A "Big BAng" EvEnT in project develop ...
- 【BZOJ1222】[HNOI2001]产品加工 DP
[BZOJ1222][HNOI2001]产品加工 Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同 ...
- 九度OJ 1178:复数集合 (插入排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8393 解决:1551 题目描述: 一个复数(x+iy)集合,两种操作作用在该集合上: 1.Pop 表示读出集合中复数模值最大的那个复数,如 ...