bzoj5019: [Snoi2017]遗失的答案
Description
Input
Output
如果L%G非零则无解,将L的每个质因子看作一维,只有每维都取到最小(L中对应质数的次数)和最大幂次(G中对应质数的次数),才能得到对应的G和L,状压表示每一维的质因数次数是否取到最小/大值,可以选的数一定每维幂次在最小值和最大值之间,这样的数很少,在数据范围内不超过800个,分治dp得出某个数不选的方案数,用总方案数减去即得到某个数必选的方案数。时间复杂度为O((L的约数个数)*log(L的约数个数)*4^(L的不同质因子个数))
#include<bits/stdc++.h>
typedef int mat[][];
const int P=1e9+;
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int n,g,l,qp,mx,fs[],tg[],tl[],fp=,ans[];
inline void inc(int&a,int b){a+=b-P,a+=a>>&P;}
struct dat{
int v,s1,s2;
bool operator<(const dat&w)const{return v<w.v;}
void trans(mat a){
for(int i=mx-;i>=;--i){
int*m1=a[i],*m2=a[i|s1];
for(int j=mx-;j>=;--j)inc(m2[j|s2],m1[j]);
}
}
}vs[];
int vp=;
void f1(int x){
for(int i=;i*i<=x;++i)if(x%i==){
do x/=i;while(x%i==);
fs[fp++]=i;
}
if(x>)fs[fp++]=x;
}
void f2(int x,int*t){
for(int i=;i<fp;++i)for(;x%fs[i]==;x/=fs[i],++t[i]);
}
void dfs(int w,int v,int s1,int s2){
if(w==fp){
if(v<=n)vs[++vp]=(dat){v,s1,s2};
return;
}
for(int i=;i<=tl[w];++i,v*=fs[w]){
if(i>=tg[w])dfs(w+,v,s1|(i==tg[w])<<w,s2|(i==tl[w])<<w);
}
}
mat F[];
int Fp=,all;
void cpy(){
for(int i=;i<mx;++i)memcpy(F[Fp+][i],F[Fp][i],sizeof(int)*mx);
++Fp;
}
void solve(int L,int R){
if(L==R){
if(R==){
cpy();
vs[].trans(F[Fp]);
all=F[Fp][mx-][mx-];
--Fp;
}
ans[L]=((all-F[Fp][mx-][mx-])%P+P)%P;
return;
}
int M=L+R>>;
cpy();
for(int i=M+;i<=R;++i)vs[i].trans(F[Fp]);
solve(L,M);
--Fp;
cpy();
for(int i=L;i<=M;++i)vs[i].trans(F[Fp]);
solve(M+,R);
--Fp;
}
void nos(){
while(qp--)puts("");
exit();
}
int main(){
n=_(),g=_(),l=_(),qp=_();
f1(g),f1(l);
std::sort(fs,fs+fp);
fp=std::unique(fs,fs+fp)-fs;
f2(g,tg),f2(l,tl);
if(n<g)nos();
for(int i=;i<fp;++i)if(tg[i]>tl[i])nos();
dfs(,,,);
std::sort(vs+,vs+vp+);
mx=<<fp;
F[][][]=;
solve(,vp);
while(qp--){
int x=_(),w=std::lower_bound(vs+,vs+vp+,(dat){x})-vs;
if(w<=vp&&vs[w].v==x)printf("%d\n",ans[w]);
else puts("");
}
return ;
}
bzoj5019: [Snoi2017]遗失的答案的更多相关文章
- BZOJ5019 SNOI2017遗失的答案(容斥原理)
显然存在方案的数一定是L的因数,考虑对其因子预处理答案,O(1)回答. 考虑每个质因子,设其在g中有x个,l中有y个,则要求所有选中的数该质因子个数都在[x,y]中,且存在数的质因子个数为x.y.对于 ...
- BZOJ5019[Snoi2017]遗失的答案——FWT+状压DP
题目描述 小皮球在计算出答案之后,买了一堆皮肤,他心里很开心,但是一不小心,就忘记自己买了哪些皮肤了.==|||万 幸的是,他还记得他把所有皮肤按照1-N来编号,他买来的那些皮肤的编号(他至少买了一款 ...
- 【BZOJ5019】[SNOI2017]遗失的答案(FWT,动态规划)
[BZOJ5019][SNOI2017]遗失的答案(FWT,动态规划) 题面 BZOJ 题解 发现\(10^8\)最多分解为不超过\(8\)个本质不同质数的乘积. 而\(gcd\)和\(lcm\)分别 ...
- bzoj 5019: [Snoi2017]遗失的答案【dp+FWT】
满足GL的组合一定包含GL每个质因数最大次幂个最小次幂,并且能做限制这些数不会超过600个 然后质因数最多8个,所以可以状压f[s1][s2]为选s1集合满足最大限制选s2集合满足最小限制 dfs一下 ...
- bzoj 5019 [Snoi2017]遗失的答案
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5019 题解 如果L不是G的倍数 答案为0 下面考虑G|L的情况 将G,L质因数分解 设$L= ...
- LOJ2257 SNOI2017 遗失的答案 容斥、高维前缀和
传送门 数字最小公倍数为\(L\)的充分条件是所有数都是\(L\)的约数,而\(10^8\)内最多约数的数的约数也只有\(768\)个.所以我们先暴力找到所有满足是\(L\)的约数.\(G\)的倍数的 ...
- luogu P5366 [SNOI2017]遗失的答案
luogu 首先gcd为\(G\),lcm为\(L\),有可能出现的数(指同时是\(G\)的因数以及是\(L\)的倍数)可以发现只有几百个.如果选出的数要能取到gcd,那么对于每种质因子,都要有一个数 ...
- 洛谷$P5366\ [SNOI2017]$遗失的答案 数论+$dp$
正解:数论$dp$ 解题报告: 传送门$QwQ$ 考虑先质因数分解.所以$G$就相当于所有系数取$min$,$L$就相当于所有系数取$max$ 这时候考虑,因为数据范围是$1e8$,$1e8$内最多有 ...
- [SNOI2017]遗失的答案
题目 首先\(G,L\)肯定会满足\(G|L\),否则直接全部输出\(0\) 之后我们考虑一下能用到的质因数最多只有\(8\)个 同时我们能选择的数\(x\)肯定是\(L\)的约数,还得是\(G\)的 ...
随机推荐
- HDU 1711:Number Sequence(KMP模板,求位置)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2017.4.7 Sprng MVC工作流程描述图
图一: 图二: Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. Dispa ...
- 【git】一台机器上使用不同的git账号
1.生成一个新的自定义名称的公钥: ssh-keygen -t rsa -C "shangxiaofei3@163.com" -f ~/.ssh/sxfself 一直点击回车 执行 ...
- LG2634 [国家集训队]聪聪可可
题意 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是 ...
- mysql自增主键
MariaDB [test]> create table test1(id int primary key auto_increment,name varchar(20))auto_increm ...
- windows知识
文章目录 系统 修改远程桌面的端口号 IE选项中reset web setting不可用(灰色)的解决办法 重装系统后,修改默认程序安装目录.我的文档.桌面 路径 Keep network addre ...
- ClusterControl docker 环境搭建
ClusterControl 是一款比较强大的数据库管理平台,包含了丰富的数据库管理功能. 我们可以用来方便的进行数据管理 测试使用docker-compose 管理 环境准备 docker-comp ...
- oracle-闪回技术1
http://blog.csdn.net/lqx0405/article/details/44776737 Oracle Study案例之--基于表空间的时间点恢复(TSPITR) DBPITR 数 ...
- oracle-rman-2
归档日志的备份 RMAN> list archivelog all;show archivelog deletion policy;configure archivelog deletion p ...
- 【转】Vue生命周期
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...