HYSBZ 4197 寿司晚宴
Description
为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。
Input
输入文件的第 1 行包含 2 个正整数 n,p,中间用单个空格隔开,表示共有 n 种寿司,最终和谐的方案数要对 p 取模。
Output
输出一行包含 1 个整数,表示所求的方案模 p 的结果。
Sample Input
3 10000
Sample Output
9
Hint
2≤n≤500
Source
任意一个正数x,其大于根号x的质因数最多只有一个,由于 n<=500,我们可以知道n的质因数最多只有9种情况(2,3,5,7,11,13,17,19,以及它特殊的一个大质数)。
可以用8位二进制进行状态压缩,再特判大质数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int mxn=;
const int pnum[]={,,,,,,,,};
struct node{
int big;
int set; }a[mxn];
int cmp(const node a,const node b){
if(a.big!=b.big)return a.big<b.big;
return a.set<b.set;
}
int f[][];//二进制压缩,[A集合用的素数][B集合用的素数]=方案数
int p1[][],p2[][];
int n,p;
int ans=;
int main(){
scanf("%d%d",&n,&p);
int i,j,k;
//分解质因数
for(i=;i<=n;i++){
int tmp=i;
for(j=;j<=;j++)//枚举每个素数
if(tmp%pnum[j]==){
a[i].set|=<<(j-);
while(tmp%pnum[j]==)tmp/=pnum[j];
}
a[i].big=tmp;//剩余的大素数,若没有则为1
}
//完成
sort(a+,a+n+,cmp);
f[][]=;
for(i=;i<=n;i++){
if(i== || a[i].big!=a[i-].big || a[i].big==){//如果新a[i]可以用来更新上一个,就复制
memcpy(p1,f,sizeof f);
memcpy(p2,f,sizeof f);
}
for(j=;j>=;j--){//倒着循环防止重复
for(k=;k>=;k--){
if((k&a[i].set)==) p1[j|a[i].set][k]=(p1[j|a[i].set][k]+p1[j][k])%p;
if((j&a[i].set)==) p2[j][k|a[i].set]=(p2[j][k|a[i].set]+p2[j][k])%p;
}
}
if(i==n || a[i].big== || a[i].big!=a[i+].big){
for(j=;j<=;j++)
for(k=;k<=;k++){
f[j][k]=((p1[j][k]+p2[j][k]-f[j][k])%p+p)%p;
}
}
}
for(i=;i<=;i++)
for(j=;j<=;j++){
if((i&j)==)ans=(ans+f[i][j])%p;//累加所有可行方案
}
printf("%d",ans);
return ;
}
HYSBZ 4197 寿司晚宴的更多相关文章
- UOJ 129/BZOJ 4197 寿司晚宴 状压DP
//By SiriusRen #include <cstdio> #include <algorithm> using namespace std; ; struct Node ...
- N - 寿司晚宴 HYSBZ - 4197 状压dp
N - 寿司晚宴 HYSBZ - 4197 推荐题解 这个题目我觉得还是很难的,借助题解写出来的,题解还看了很久,现在还是不是很理解. 首先这个数比较大有500,如果直接就像这个题目S - Query ...
- 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 NOI 2015 寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[Submit][Status] ...
- BZOJ 4197: [Noi2015]寿司晚宴 状态压缩 + 01背包
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿 ...
- [BZOJ]4197: [Noi2015]寿司晚宴
Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NO ...
- BZOJ 4197 NOI 2015 寿司晚宴
题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...
- 【BZOJ-4197】寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[Submit][Status] ...
- [BZOJ4197][Noi2015]寿司晚宴
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 412 Solved: 279[Submit][Status] ...
随机推荐
- 转:CentOS设置时区
from: http://os.51cto.com/art/201004/192805.htm 建议直接使用: 1. session 临时修改查看: tzselect. 然后数字键入,回车 2. 永久 ...
- VC2010中去掉红绝下划线
1. 在VC2010 的tools/中找到editior. 已经找到c/c++->advanced->IntelliSense->Disable IntelliSence->T ...
- css3爆炸效果更换图片轮播图
思路:给一个div设置一个背景图片1.jpg,然后在这个div上面用两个for循环动态的创建一个列数为C行数为R数量的span,并给这些span设置宽高.定位并设置背景图片0.jpg,然后设置每个sp ...
- Redis集群环境的部署记录
Redis Cluster终于出了Stable,这让人很是激动,等Stable很久了,所以还是先玩玩. 一. 集群简单概念. Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施( ...
- poj 1163 The Triangle
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43809 Accepted: 26430 De ...
- 004医疗项目-逆向工程-pojo类的创建和对应xml的生成
我们使用mybatis的逆向工程来生成pojo类,省去很多不必要的工作. 我把逆向工程需要的项目如下:
- Android Studio Jar、so、library项目依赖
Eclipse跟AS的不同 从Eclipse到AS不要带着在Eclipse中的主观色彩去在AS中使用,从项目的构成到构建是不同的,下面列举在Eclipse和AS中的一些概念的区别: WorkSpace ...
- NET Office 组件Spire
高效而稳定的企业级.NET Office 组件Spire 在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是"这个系统似乎就是专门操作文档的" ...
- 实验三实验报告 20135324&&20135330
北京电子科技学院(BESTI) 实验报告 课程:深入理解计算机系统 班级:1353 姓名:张若嘉 杨舒雯 学号:20135330 20135324 成绩: 指导教师:娄嘉鹏 实验日期:2015.11. ...
- Git差异比对
一. 查看变更还未载入(changed but unstaged,当前没有add 的内容)的文件比对: 只需运行不带任何参数的'git diff'命令即可 二. 查看载入(stage,即已经add)而 ...