p2150 [NOI2015]寿司晚宴
分析
我们发现对于大于$\sqrt(n)$的数每个数最多只会包含一个
所以我们把每个数按照大质数的大小从小到大排序
我们知道对于一种大质数只能被同一个人取
所以f1表示被A取,f2表示被B取
最终答案就是这两个的答案减去啥都不去的答案
因为啥都不去会被重复记录两次
对于小质数则直接状压转移即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int p1[] = {,,,,,,,,};
const int cnt1 = ;
int dp[][],n,mod,f1[][],f2[][];
struct node {
int msk,ano;
};
node d[];
inline void init(int x){
int res=x+;
for(int i=;i<=cnt1;i++){
if(res==)break;
if(res%p1[i]==)d[x].msk|=(<<(i-));
while(res%p1[i]==)res/=p1[i];
}
d[x].ano=res;
}
inline bool cmp(const node x,const node y){return x.ano<y.ano;}
signed main(){
int i,j,k,p,q;
scanf("%lld%lld",&n,&mod);
n--;
for(i=;i<=n;i++)init(i);
sort(d+,d+n+,cmp);
dp[][]=;
for(i=;i<=n;i++){
if(d[i].ano==||d[i].ano!=d[i-].ano){
memcpy(f1,dp,sizeof(f1));
memcpy(f2,dp,sizeof(f2));
}
for(j=(<<)-;j>=;j--)
for(k=(<<)-;k>=;k--)if(!(j&k)){
int msk1=j|d[i].msk,msk2=k|d[i].msk;
if(!(msk1&k))f1[msk1][k]=(f1[msk1][k]+f1[j][k])%mod;
if(!(msk2&j))f2[j][msk2]=(f2[j][msk2]+f2[j][k])%mod;
}
if(d[i].ano==||d[i].ano!=d[i+].ano||i==n){
for(j=(<<)-;j>=;j--)
for(k=(<<)-;k>=;k--)if(!(j&k)){
dp[j][k]=(-dp[j][k]+mod)%mod;
dp[j][k]=(dp[j][k]+f1[j][k])%mod;
dp[j][k]=(dp[j][k]+f2[j][k])%mod;
}
}
}
int Ans=;
for(j=;j<(<<);j++)
for(k=;k<(<<);k++)
if(!(j&k))Ans=(Ans+dp[j][k])%mod;
cout<<Ans;
return ;
}
p2150 [NOI2015]寿司晚宴的更多相关文章
- 洛谷$P2150\ [NOI2015]$寿司晚宴 $dp$
正解:$dp$ 解题报告: 传送门$QwQ$. 遇事不决写$dp$($bushi$.讲道理这题一看就感觉除了$dp$也没啥很好的算法能做了,于是考虑$dp$呗 先看部分分?$30pts$发现质因数个数 ...
- UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)
题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...
- 并不对劲的bzoj4197:loj2131:uoj129:p2150:[NOI2015]寿司晚宴
题目大意 有两个集合\(S_1,S_2 \subseteq [2,n] (n\leq 500)\),且对于\(\forall x\in S_1,y\in S_2 , gcd(x,y)=1\) 求\(S ...
- [BZOJ4197][Noi2015]寿司晚宴
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 412 Solved: 279[Submit][Status] ...
- BZOJ 4197: [Noi2015]寿司晚宴( dp )
N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个 ...
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
- [NOI2015]寿司晚宴 --- 状压DP
[NOI2015]寿司晚宴 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴. 小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿 ...
- 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数
[BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ...
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ...
随机推荐
- 批量插入数据利器之SqlBulkCopy
工作中要频繁的处理一些数据导入,又不想手工去做,因此用了神器SqlBulkCopy.在MSDN查看了此类的帮助文档几经波折终于搞定,记录下来方便以后查阅. MSDN实例: using System.D ...
- ACM学习历程—51NOD 1770数数字(循环节)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...
- ubantu 虚拟机无法查看windows共享目录
初学linux,安装好虚拟机,安装好ubantu系统,启动系统后无法查看windows共享目录. 原因是没有安装 vmware tools 教程地址:http://www.linuxidc.com/L ...
- Zabbix通过进程名监控进程状态配置详解
Zabbix通过进程名监控进程状态配置详解 有时候我们只能通过进程名监控一个进程是否停掉了,因为有的进程并没有对外提供端口号,以下记录了下详细步骤,通过这个示例会学到很多zabbix核心配置相关的东西 ...
- 最长的回文串——hdu3068
http://acm.hdu.edu.cn/showproblem.php?pid=3068 abcba 5 aab 2 在一个字符串里寻找一条最长的回文串 比较直接的想法是枚举中心点 然后像两边扩散 ...
- debian的bt下载工具
sudo apt install qbittorrent 如果觉得下载慢,可以选择下载的文件,在trackers部分修改 https://github.com/ngosang/trackerslist
- awk常见基本使用
-F 指定分割符号 print 外层的引号必须是单引号 $n不能被解析 [root@bogon ~]# .txt a:b:c:d a1:b1:c1:d1 a2:b2:c2:d2 a_: :c:dddd ...
- [PHP] - Laravel - CSRF token禁用方法与排除验证csrf_token的url设置
laravel5.1排除验证csrf_token的url设置 <?php namespace App\Http\Middleware; use Illuminate\Foundation\Htt ...
- 小程序mina框架与配置
小程序是采用MINA框架 <!--demo.wxml--> <view> Hello {{name}}</view> <button bindtap=&quo ...
- mysql锁,事务
什么是事务 事务定义了一个服务操作序列,由服务器保证这些操作序列在多个客户并发访问和服务器出现故障情况下的原子性事务的属性 A --redo&undo C --undo I --lock D ...