P2150-[NOI2015]寿司晚宴【dp】

正题

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


题目大意

2∼n2\sim n2n选出一些分成两个集合,要求这两个集合中没有一对数不是互质的。求方案数对ppp取模

2≤n≤500,1≤p≤10102\leq n\leq 500,1\leq p\leq10^{10}2n500,1p1010


解题思路

数据小的情况我们可以把所有质数拿出来状压,但是这里500500500质数还是很多的,所以我们不能直接这么搞。

平时我们质因数分解能够发现nnn分解后最多只有一个>n>\sqrt n>n的质因子。这里n\sqrt nn以内的质数只有888个好像可以搞。

枚举一个大于888的质数xxx,对于所有包含这个质因子的数两个集合中只能有一个存在,然后前888个状压,设fi,jf_{i,j}fi,j分别表示两个集合中的前888个质数拥有的集合。显然转移的时候只需要满足i&j=0i\&j=0i&j=0即可。

然后对于拥有同一个大质数的所有数字只能有一个集合选择,f0i,jf0_{i,j}f0i,j表示第一个集合选,f1i,jf1_{i,j}f1i,j表示第二个集合选,然后做完之后fi,j=f0i,j+f1i,j−fi,jf_{i,j}=f0_{i,j}+f1_{i,j}-f_{i,j}fi,j=f0i,j+f1i,jfi,j就好了。

时间复杂度O(n282)O(n2^{8^2})O(n282)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=510,M=256;
ll pri[8]={2,3,5,7,11,13,17,19};
ll n,P,s[N],f[M][M],f0[M][M],f1[M][M],ans;
vector<int>p[N];
signed main()
{scanf("%lld%lld",&n,&P);for(ll i=2;i<=n;i++){ll x=i;for(ll j=0;j<8;j++)if(x%pri[j]==0){s[i]|=(1<<j);while(x%pri[j]==0)x/=pri[j];}p[x].push_back(i);}f[0][0]=1;for(ll x=1;x<=500;x++){if(!p[x].size())continue; for(ll y=0;y<p[x].size();y++){if(y==0||x==1){memcpy(f0,f,sizeof(f0));memcpy(f1,f,sizeof(f1));}ll c=p[x][y];for(ll i=255;i>=0;i--)for(ll j=255;j>=0;j--){if(i&j)continue;if(!(s[c]&j))(f0[i|s[c]][j]+=f0[i][j])%=P;if(!(s[c]&i))(f1[i][j|s[c]]+=f1[i][j])%=P;}if(y!=p[x].size()-1&&x!=1)continue;for(ll i=0;i<256;i++)for(ll j=0;j<256;j++)f[i][j]=(f0[i][j]+f1[i][j]-f[i][j])%P;}}for(ll i=0;i<256;i++)for(ll j=0;j<256;j++)(ans+=f[i][j])%=P;printf("%lld\n",(ans+P)%P);return 0;
}

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

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

相关文章

ABC181——F - Silver Woods

现在时间太少了&#xff0c;只能把自己不会的题补一下&#xff0c;会的题就不写了 F - Silver Woods 显然可以二分圆的半径&#xff0c;那么现在问题转化成判断半径为rrr的圆是否能够满足题意。 考虑什么情况下该半径的圆不能通过这些点。尝试用并查集维护一些关系 如果两个…

【树链剖分】洛谷树(P3401)

正题 P3401 题目大意 给你一棵树&#xff0c;让你进行以下操作 修改一条边的边权查询一条路径的所有子路径异或值的和 解题思路 记下所有点到根节点的路径亦或值&#xff0c;那么查询就是所有点对的异或值之和 因为边权<1024&#xff0c;最多只有10位&#xff0c;所以可…

牛客练习赛70 重新排列

来源&#xff1a;牛客网&#xff1a; 文章目录重新排列题解&#xff1a;代码&#xff1a;重新排列 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 牛牛有个很喜欢的字符串”…

.NET 源代码库指南

微软.NET开发团队在博客上&#xff08;https://blogs.msdn.microsoft.com/dotnet/2018/10/15/guidance-for-library-authors/&#xff09;发布了.NET Library Guidance的第一个版本。这是一系列全新的文章&#xff0c;指导你为.NET创建高质量代码库。该指南包含我们已确定的适用…

P4774-[NOI2018]屠龙勇士【EXCRT】

正题 题目链接:https://www.luogu.com.cn/problem/P4774 题目大意 nnn个龙血量为aia_iai​&#xff0c;回复能力为pip_ipi​&#xff0c;死亡后掉落剑的攻击力tit_iti​&#xff0c;mmm把剑&#xff0c;攻击力为bib_ibi​。 从111开始打&#xff0c;每次使用不大于当前龙血量…

ARC107——D - Number of Multisets

D - Number of Multisets 之前写过一个类似表示的题&#xff08;2018CCPC吉林赛区——C - Justice&#xff09;&#xff0c;也是让用12,14,18…\frac1 2 ,\frac 14,\frac1 8 \dots21​,41​,81​…凑数&#xff0c;我效仿之前的思路写了个复杂度不清楚的东西&#xff08;非常爆…

【树链剖分】春季大扫除(P6805)

正题 P6805 题目大意 给你一棵树&#xff0c;每次可选择两个叶子结点&#xff0c;然后覆盖路径上的边&#xff0c;代价为其长度&#xff0c;每个叶子结点只能选一次。 对于每次询问&#xff0c;加入若干新点&#xff08;只会连接原树的点&#xff09;&#xff0c;问你覆盖所…

序列自动机

介绍 子串&#xff1a;串中任意个连续的字符组成的子序列称为该串的子串 子序列&#xff1a;子序列中的字符在字符串中不一定是连在一起的&#xff0c;而是删除其中若干个&#xff0c; 但子序列一定是单调的 简单说就是子序列不连续&#xff0c;子串连续 序列自动机可以在复杂…

基于gRPC服务发现与服务治理的方案

重温最少化集群搭建&#xff0c;我相信很多朋友都已经搭建出来&#xff0c;基于Watch机制也实现了出来&#xff0c;相信也有很多朋友有了自己的实现思路&#xff0c;但是&#xff0c;很多朋友有个疑问&#xff0c;我API和服务分离好了&#xff0c;怎么通过服务中心进行发现呢&a…

YbtOJ#723-欧拉之树【莫比乌斯反演,虚树】

正题 题目链接:http://www.ybtoj.com.cn/contest/121/problem/2 题目大意 给出nnn个点的一棵树&#xff0c;每个点有一个权值aia_iai​&#xff0c;求 ∑i1n∑j1ndis(i,j)φ(aiaj)\sum_{i1}^n\sum_{j1}^ndis(i,j)\times \varphi(a_i\times a_j)i1∑n​j1∑n​dis(i,j)φ(ai​…

拼凑 牛客练习赛70

来源&#xff1a;牛客网&#xff1a; 题目描述 牛牛还是很喜欢字符串"puleyaknoi"。 牛牛有T个超长超长的字符串&#xff0c;不过这次他更懒了&#xff0c;他希望直接在字符串中看见他喜欢的字符串。 如果一个子串中含有一个子序列是”puleyaknoi“&#xff0c;那么…

【kruskal】【倍增】严格次小生成树(P4180)

正题 P4180 题目大意 求严格次小生成树 解题思路 一定存在一种严格次小生成树&#xff0c;和最小生成树只差一条边&#xff0c;不然可以用一条最小生成树上的边代替&#xff0c;从而使边权和更小 那么可以先构造出最小生成树&#xff0c;然后枚举每一条不在最小生成树中的边…

ARC107——C - Shuffle Permutation

C - Shuffle Permutation 这几天遇到了很多&#xff08;2道&#xff09;并查集维护连通关系的题。 此题把能够相互交换的行或者列用并查集维护&#xff0c;不难发现一个连通块内的点个数时cntcntcnt连通块内的行或者列可以两两交换&#xff0c;那么对答案的贡献是cnt!cnt!cnt…

CentOS ASP.NET Core Runtime Jexus跨平台布署

.net core 开源和跨平台&#xff0c;能布署到当前主流的Windows&#xff0c;Linux&#xff0c;macOS 系统上。本篇我们将在 Linux 系统上使用 ASP.NET Core Runtime 和 Jexus 布署运行 ASP.NET Core 网站。Linux 系统选的是 CentOS 7.4 64位.NET Core 安装的是 ASP.NET Core Ru…

P1912-[NOI2009]诗人小G【四边形不等式,单调队列】

正题 题目链接:https://www.luogu.com.cn/problem/P1912 题目大意 给出nnn个字符串&#xff0c;把这些字符串依次用空格&#xff08;算一个长度&#xff09;连接分成若干段&#xff0c;若一段长度为xxx&#xff0c;那么代价是∣x−L∣P|x-L|^P∣x−L∣P 求代价和最小的方案&…

疾病预测和天气分析练习赛

肝了半天再加一个晚上。。 之前学了一小段时间的TensorFlow&#xff0c;但是今天练习赛时发现根本没啥用。。。第一阶段早就做完了&#xff0c;今天做的都是第二阶段&#xff0c;都是啥玩意题 又是偏度&#xff0c;又是求系数&#xff0c;又是拟合KNN&#xff0c;真的把人看吐…

Korney Korneevich and XOR(CF750F1/F2)

正题 CF750F1 CF750F2 题目大意 给你一个数列&#xff0c;问有多少个数可以由一个单调递增的子序列异或得到 解题思路 对于F1&#xff0c;可以用p存下得到一个数的最小值&#xff08;即当前子序列前缀的最后一个数&#xff09;&#xff0c;然后直接暴力转移 对于F2&#xf…

《信号与系统》期中总结

某高校的某专业于2020/11/8日进行《信号与系统》期中考试&#xff0c;而某同学这次考试直接爆炸&#xff0c;原因某同学也差不多知道&#xff1a;对待这门学科浅尝辄止&#xff0c;只达到了看着答案&#xff08;看答案看书&#xff09;能够把作业做出来的程度。虽然已经爆炸了&…

YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】

正题 题目链接:http://www.ybtoj.com.cn/contest/122/problem/3 题目大意 S(i)S(i)S(i)表示iii的约数个数&#xff0c;QQQ次询问给出n,mn,mn,m求 ∑a1n∑b1mS(a2)S(b2)S(ab)\sum_{a1}^n\sum_{b1}^mS(a^2)\times S(b^2)\times S(a\times b)a1∑n​b1∑m​S(a2)S(b2)S(ab) 1≤Q≤…

微软智能云三驾马车Azure、Office 365、Dynamics 365齐聚中国

Dynamics 365计划于2019年春落地中国&#xff1b;Windows Server 2019、Office 2019正式商用&#xff1b;SQL Server 2019、Azure Sphere 公开预览&#xff1b;Microsoft Azure 更新数十项云服务与功能&#xff0c;聚焦物联网与边缘。2018年10月25日&#xff0c;上海 —— 2018…