P5366-[SNOI2017]遗失的答案【状压dp,FWT】

正题

题目链接:https://www.luogu.com.cn/problem/P5366


题目大意

给出一个n,G,Ln,G,Ln,G,L

qqq次询问在1∼n1\sim n1n中选择若干个数字并且数字xxx必选,要求这些数的gcdgcdgcdGGGlcmlcmlcmLLL的方案数。

1≤n,G,L,x≤108,1≤q≤1051\leq n,G,L,x\leq 10^8,1\leq q\leq 10^51n,G,L,x108,1q105


解题思路

我们令m=LG,x=xG,n=⌊nG⌋m=\frac{L}{G},x=\frac{x}{G},n=\lfloor\frac{n}{G}\rfloorm=GL,x=Gx,n=Gn,那么就是求选1∼m1\sim m1m中的数的情况下gcd=1,lcm=mgcd=1,lcm=mgcd=1,lcm=m的方案。

发现对于每个mmm的分解后的质因数pcp^cpc,我们选择的数的为pkp^kpk,那么我们至少需要一个k=0k=0k=0和一个k=ck=ck=c

也就是其实0<k<m0<k<m0<k<m的都是不会对这个质因数产生影响的,所以我们可以把一个质因子ppp分出两个状态,分别是k=0k=0k=0的和k=mk=mk=m的有没有。

同样的,我们用上面的状态SSS表示1∼n1\sim n1n的数字,会发现SSS最多只有六百出头种不同的取值。

那么我们把这些取值拿出来,把数字分成不同的类,这样我们就只需要考虑每个类的数字个数了。记fi,Sf_{i,S}fi,S表示做完了前iii类时状态为SSS的方案,同理gi,Sg_{i,S}gi,S则表示做完了后iii类。

这样我们可以用FWTFWTFWT快速处理出hi,Sh_{i,S}hi,S表示处理了除了第iii类以外的所有类,状态为SSS时的方案。

然后再考虑这一类有一个数字必选来转移每个hi,Sh_{i,S}hi,S就知道每一类的答案了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cctype>
using namespace std;
const int N=1<<16,M=610,P=1e9+7;
int n,G,L,q,m,tot,cnt,MS,num[N];
int p[99],c[99],pos[N],pw[M],rev[M];
int f[M][N],g[M][N],h[M][N];
int read(){int x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-48;c=getchar();}return x*f;
}
int power(int x,int b){int ans=1;while(b){if(b&1)ans=1ll*ans*x%P;x=1ll*x*x%P;b>>=1;}return ans;
}
void FWT(int *f,int n,int op){for(int p=2;p<=n;p<<=1)for(int k=0,len=p>>1;k<n;k+=p)for(int i=k;i<k+len;i++)(f[i+len]+=f[i]*op)%=P;return;
}
void dfs(int dep,int x,int s){if(x>n)return;if(dep>cnt){num[s]++;return;}dfs(dep+1,x,s|(1<<dep+cnt-1));for(int i=1,pw=1;i<=c[dep];i++)pw=pw*p[dep],dfs(dep+1,x*pw,s|((i==c[dep])<<dep-1));return;
}
void init(){int x=m;for(int i=2;i<=x;i++)if(x%i==0){p[++cnt]=i;while(x%i==0)c[cnt]++,x/=i;}dfs(1,1,0);MS=(1<<cnt*2);for(int i=0;i<MS;i++)if(num[i]){pos[i]=++tot;rev[tot]=i;pw[tot]=power(2,num[i])-1;}f[0][0]=g[tot+1][0]=1;for(int i=1;i<=tot;i++)for(int j=0;j<MS;j++){(f[i][j]+=f[i-1][j])%=P;(f[i][j|rev[i]]+=1ll*f[i-1][j]*pw[i]%P)%=P;}for(int i=tot;i>=1;i--)for(int j=0;j<MS;j++){(g[i][j]+=g[i+1][j])%=P;(g[i][j|rev[i]]+=1ll*g[i+1][j]*pw[i]%P)%=P;}for(int i=0;i<=tot;i++)FWT(f[i],MS,1);for(int i=1;i<=tot+1;i++)FWT(g[i],MS,1);for(int i=1;i<=tot;i++)for(int j=0;j<MS;j++)h[i][j]=1ll*f[i-1][j]*g[i+1][j]%P;for(int i=1;i<=tot;i++){FWT(h[i],MS,-1);int k=power(2,num[rev[i]]-1);for(int j=MS-1;j>=0;j--){int r=h[i][j];h[i][j]=0;(h[i][j|rev[i]]+=1ll*r*k%P)%=P;}}return;
}
signed main()
{n=read();G=read();L=read();q=read();n/=G;m=L/G;init();while(q--){int x=read();if(x%G){puts("0");continue;}if(L%x){puts("0");continue;}x/=G;if(x>n){puts("0");continue;}int S=((1<<cnt)-1)*(1<<cnt);for(int i=1;i<=cnt;i++)if(x%p[i]==0){int k=0;S^=(1<<i+cnt-1);while(x%p[i]==0)x/=p[i],k++;if(k==c[i])S|=(1<<i-1);}cout<<(h[pos[S]][MS-1]+P)%P<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017ACM/ICPC广西邀请赛

2017ACM/ICPC广西邀请赛&#xff08;感谢广西大学&#xff09; 题号题目考点难度AA Math Problem数论签到题BColor itCCounting StarsDCoveringECS Course思维 &#xff0c;二进制思维题FDestroy Walls最大生成树GDuizi and Shunzi思维题HLaw of CommutationIMatching in a Tr…

【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

上篇文章我介绍了如何强制令牌过期的实现&#xff0c;相信大家对IdentityServer4的验证流程有了更深的了解&#xff0c;本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证&#xff0c;然后根据不同的客户端使用不同的认证方式来集成到统一认证平台。.netcore项目实战交…

CF1500C Matrix Sorting(拓扑排序)

解析 神仙题 我想到了一部分&#xff0c;但是由于没想到倒着做&#xff0c;后面越想越复杂… 本题的关键是要倒着想 考虑最后一次排序的列x 必须是单调不增的 否则直接错 然后倒数第二列y 必须在x列相等的段内单调不增&#xff0c;因为这些地方x无法起到排序的作用 同理再到倒…

P8292-[省选联考 2022]卡牌【状压,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P8292 题目大意 有nnn张卡牌&#xff0c;第iii张上的数字是sis_isi​。mmm次询问给出cic_ici​个质数&#xff0c;要求选择一些卡使得这些卡的乘积是这些质数的倍数&#xff0c;求方案数。 1≤n≤106,1≤si≤2000,1≤m≤1500…

D - Covering HDU - 6185(未解决完)

D - Covering HDU - 6185 题意&#xff1a; 4 * n的地板&#xff0c;有无数个1 * 2 和2 * 1 的砖块&#xff0c;问有多少方式填满&#xff1f; 1≤n≤10^18 题解&#xff1a; 矩阵快速幂 代码&#xff1a;

.NET-记一次架构优化实战与方案-前端优化

前言上一篇《.NET-记一次架构优化实战与方案-梳理篇》整理了基本的业务知识&#xff0c;同时也罗列了存在的问题&#xff0c;本篇主要是针对任务列表的页面进行性能优化。该篇主要涉及的是代码实现上的优化&#xff0c;实现上的问题是战术债务&#xff0c;也就是我们平常出现的…

11.17 模拟:总结

解析 50pts 50000 最后一次模拟 …说不出太多好话来 口罩、核酸、没样例、最困的点、T4诡异的题面和莫名其妙的链接…可以说是天时地利人和全都没的一干二净了 但有一说一今天的题&#xff08;除了T4&#xff09;都还是不错的&#xff0c;虽然难的要死&#xff0c;但是大部分…

GDOI2022游记

文章目录Day -1Day 0Day 1Day 2Day 3()Day ?~?Day ?Day -1 考前好像写题状态不太好&#xff08;可能是纯粹的懒&#xff09;。 开始写板子&#xff0c;很多算法都很久没碰了&#xff0c;有的调了很久才过。树剖都调了一个多小时&#xff0c;身败名裂。不过想想省选应该不怎…

第十一届山东省大学生程序设计竞赛

第十一届山东省大学生程序设计竞赛 题号题目知识点难度ABeta GoBBuild Roads最小生成树&#xff0c;思维题一般CCat Virus构造题有点难想DDyson Box模拟签到题EEvaluate ExpressionFBirthday CakeGGrade Point Average模拟签到题HAdventurer’s Guild背包问题签到题IChemical …

[CF/AT/Luogu]各大网站网赛 爆肝部部长工作报告文件Ⅱ

文章目录CodeForcesLATOKEN-Round-1(Div.1Div.2)A. Colour the FlagB. Histogram UglinessC. Little Alawns PuzzleD. Lost TreeE. Lost ArrayF1. Falling Sand (Easy Version)#726-Div.2A. Arithmetic ArrayB. Bad BoyC. Challenging CliffsD. Deleting DivisorsE. Erase and …

.NET-记一次架构优化实战与方案-梳理篇

前言程序员输出是他敲写的代码&#xff0c;那么输入就是他思考好的设计。因此不做设计是不存在&#xff0c;设计只分优秀的设计和糟糕的设计。为了避免过度设计浪费成本&#xff0c;需要针对现有业务与问题进行展开。业务梳理是不可避免的。优化是无止尽&#xff0c;为了更有成…

P3605 [USACO17JAN]Promotion Counting P(树状数组)

解析 做法很多的一道题 sol1 先求出dfs序&#xff0c;离线下来&#xff0c;然后按权值大小的顺序统计答案并插到对应的dfs序中 sol2 离散化后&#xff0c;dfs过程中动态维护树状数组&#xff0c;利用前后差值求出答案 sol3 树上dsu 就比较无脑了&#xff0c;暴力维护即可…

Build Roads

Build Roads 题意: n个点&#xff0c;每个点的值为a[i],求最小生成树 a[i]是通过题目中给出的程序得到&#xff08;即a[i]如何得到的我们并不需要很了解&#xff09; 题解&#xff1a; 肯定不能直接跑最小生成树&#xff0c;因为数据太大了 银川也有个类似的题&#xff0c;…

CF1672E-notepad.exe【交互,二分】

正题 题目链接:https://www.luogu.com.cn/problem/CF1672E 题目大意 有一个你不知道的长度为nnn的序列lll&#xff0c;你每次可以询问一个长度www。交互库会返回一个hhh表示最少能将lll分成多少连续段使得每一段[l,r][l,r][l,r]都满足∑ilrlir−l≤w\sum_{il}^rl_ir-l\leq w∑…

P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)

解析 很好的题 也就是我没做出来的意思 反向思维似乎是我欠缺的 这道题也是 也许做题时应该多特意往这边想想 当正向看并没有太好的性质时&#xff0c;也许反过来能使题目豁然开朗 容易想到暴力n方如何做 &#xff08;以下均指反图&#xff09; 找到1所在的点&#xff0c;染色…

.NET Core 3.0 中的数据库驱动框架 System.Data

虽然没有得到很多关注&#xff0c;但System.Data对于.NET 中任何关系型数据库的访问都至关重要。因为其前身是 ActiveX Data Objects&#xff0c;所以它也被称为 ADO.NET。System.Data 提供了一个通用框架&#xff0c;是构建.NET 数据库驱动程序的基础。该框架提供了数据库驱动…

P3784-[SDOI2017]遗忘的集合【多项式ln,MTT,莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P3784 题目大意 你若干个在[1,n][1,n][1,n]的不同数字组成序列aaa。 记录f(x)f(x)f(x)表示将xxx无序拆分成aaa中数字的和的方案数&#xff08;一个数字可以使用多次&#xff09;。 现在给出所有的f(x)%p(x∈[1,n])f(x)\%p\…

Matrix Problem

Matrix Problem 题意&#xff1a; 给你一个n * m的二维数据c&#xff0c;c的每个元素值为0或1 现在要求你构造同样大小的数组a和b&#xff0c;要求c[i][j] 1’的话&#xff0c;a[i][j] b[i][j] ‘1’&#xff0c;如果c[i][j] ‘0’.a[i][j]!b[i][j]&#xff0c;且a和b中的1…

P3545HUR-Warehouse StoreP4053建筑抢修(反悔贪心、堆)

解析 两道很像的题 不能说相似&#xff0c;只能说是一模一样 感觉有火车载客的影子 想到开个堆来维护 在供不应求时弹出要求最高的即可 T1还得输出方案针麻烦 代码 你会发现几乎一毛一样 T1 #include<bits/stdc.h>const int N3e5100; const int M2e3100; const int …

ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

一、前言在涉及到后端项目的开发中&#xff0c;如何实现对于用户权限的管控是需要我们首先考虑的&#xff0c;在实际开发过程中&#xff0c;我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能&#xff0c;而在 Grapefruit.VuCore 这个项目中&#xff0c;我将使用 Jwt …