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

正题

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


题目大意

nnn张卡牌,第iii张上的数字是sis_isimmm次询问给出cic_ici个质数,要求选择一些卡使得这些卡的乘积是这些质数的倍数,求方案数。

1≤n≤106,1≤si≤2000,1≤m≤1500,∑i=1mci≤180001\leq n\leq 10^6,1\leq s_i\leq 2000,1\leq m\leq 1500,\sum_{i=1}^m c_i\leq 180001n106,1si2000,1m1500,i=1mci18000


解题思路

对于一个数字xxx来说,大于x\sqrt xx的质因子只会有一个,也就是对于大于所有的si\sqrt s_isi的质数ppp,它们的倍数之间不会产生重复,可以分开计数。

而小于si\sqrt s_isi的质数个数只有141414个,我们可以考虑状压。

处理出gsg_sgs表示在集合sss中的质数都不选择(即没有这些数的倍数)时的数字个数,然后再预处理出一个fi,sf_{i,s}fi,s表示质数iii的倍数中集合sss中的质数都不选择时的数字个数。

那么对于一个询问,我们先处理出小于等于s\sqrt ss的质数被加进去的状态SSS,然后对于大于s\sqrt ss的每个质数ppp,那么答案就是

∑T⊆S(2gT×∑p(1−12fp,T))(−1)∣T∣\sum_{T\sube S}\left(2^{g_T}\times \sum_{p}\left(1-\frac{1}{2^{f_{p,T}}}\right)\right)(-1)^{|T|}TS(2gT×p(12fp,T1))(1)T

然后求和就可以了


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cctype>
#define ll long long
using namespace std;
const ll N=2100,M=1e6+10,L=14,P=998244353;
ll n,m,cnt,pri[320],pw[M],iw[M],ct[1<<L];
ll w[N],f[1<<L][320],g[1<<L],q[N*10],v[N];
vector<ll> r;bool usd[N];
ll read(){ll 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;
}
void Prime(){for(ll i=2;i<N;i++){if(!v[i])pri[cnt]=i,cnt++,v[i]=cnt-1;for(ll j=0;j<cnt&&i*pri[j]<N;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;}}return;
}
signed main()
{Prime();n=read();pw[0]=iw[0]=1;for(ll i=1;i<=n;i++)pw[i]=pw[i-1]*2ll%P;for(ll i=1;i<=n;i++)iw[i]=iw[i-1]*(P+1)/2ll%P;for(ll i=1,x;i<=n;i++)x=read(),w[x]++;ll MS=(1<<L);for(ll s=1;s<MS;s++)ct[s]=ct[s-(s&-s)]+1;for(ll s=0;s<MS;s++){r.clear();memset(usd,0,sizeof(usd));for(ll i=0;i<L;i++)if((s>>i)&1){for(ll j=pri[i];j<=2000;j+=pri[i])usd[j]=1;}for(ll i=1;i<=2000;i++)if(!usd[i])g[s]+=w[i],r.push_back(i);g[s]=pw[g[s]];for(ll i=L;i<cnt;i++){f[s][i]=0;for(ll j=0;r[j]*pri[i]<=2000;j++)f[s][i]+=w[r[j]*pri[i]];ll k=f[s][i];f[s][i]=iw[k]*(pw[k]-1)%P;}}m=read();while(m--){ll k=read();ll t=0,tot=0,ans=0;for(ll i=1,x;i<=k;i++){x=read();if(v[x]<L)t|=1<<v[x];else q[++tot]=v[x];}sort(q+1,q+1+tot);tot=unique(q+1,q+1+tot)-q-1;for(ll s=t;s>=0;s=(s-1)&t){ll k=(ct[s]&1)?(P-g[s]):g[s];for(ll i=1;i<=tot;i++)k=k*f[s][q[i]]%P;(ans+=k)%=P;if(!s)break;}printf("%lld\n",(ans+P)%P);}return 0;
}

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

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

相关文章

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 …

AT2293-[AGC009D] Uninity【贪心,状压】

正题 题目链接:https://www.luogu.com.cn/problem/AT2293 题目大意 给出一棵树&#xff0c;求它一棵点分树的最小深度。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 点分树的做法是直接找重心&#xff0c;但是两个重心我们很难确定找哪个&#xff0c;所以这个方法行不通。…

[2021-06-19] 提高组新手副本Ⅱ(联网,欧几里得,分解树,开关灯)

文章目录考试心路历程联网titlesolutioncode欧几里得titlesolutioncode分解树titlesolutioncode开关灯titlesolutioncode考试心路历程 佛了佛了&#xff0c;caocaocaocaocaocao 人直接炸嗨升天 并查集直接送走200200200分&#xff01;&#xff01;&#xff01;我屮艸芔茻 T1二…

模板:扫描线

那看似平凡的面积&#xff0c;是多少条线的织物啊 前言 突然发现自己之前没发过扫描线的模板 可能是因为之前的实现太差了 这次感觉实现的还是很不错的&#xff0c; 虽然常数比较大&#xff0c;但是好写啊&#xff01; 原来扫描线也是可以1A的 线段树上利用zld讲解的维护最小…

P4887-[模板]莫队二次离线(第十四分块(前体))

正题 题目链接:https://www.luogu.com.cn/problem/P4887 题目大意 给出一个长度为nnn的序列aaa。mmm次询问[l,r][l,r][l,r]求有多少个l≤i<j≤rl\leq i< j\leq rl≤i<j≤r满足aixoraja_i\ xor\ a_jai​ xor aj​二进制下恰好有kkk个111。 1≤n,q≤105,0≤ai,k<21…