[NOI2005]寿司晚宴
题目描述
为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴。小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴。
在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种寿司的美味度为i+1(即寿司的美味度为从2到n)。
现在小G和小W希望每人选一些寿司种类来品尝,他们规定一种品尝方案为不和谐的当且仅当:小G品尝的寿司种类中存在一种美味度为x的寿司,小W品尝的寿司中存在一种美味度为y的寿司,而x与y不互质。
现在小G和小W希望统计一共有多少种和谐的品尝寿司的方案(对给定的正整数p取模)。注意一个人可以不吃任何寿司。
输入输出格式
输入格式:
从文件dinner.in中读入数据。
输入文件的第1行包含2个正整数n,p中间用单个空格隔开,表示共有n种寿司,最终和谐的方案数要对p取模。
输出格式:
输出到文件dinner.out中。
输出一行包含1个整数,表示所求的方案模p的结果。
输入输出样例
3 10000
9
4 10000
21
100 100000000
3107203
题解:
小于√500的素数有8个,对于题意,可以理解为两人不能有同一素数倍数的寿司
比如选了6,相当于选了2,3,则;另一人不能选2,3的倍数
用8为二进制数来保存情况,状压dp
f[j][k]表示小G为j小W为k的方案数,p[1][j][k]表示小G选,p[2][j][k]表示小w选
注意一个数可能有大于√500的因数,但显然只能有一个,记录下为ki,如果ki相同也不能选
转移后f[j][k]=p[1][j][k]+p[2][j][k]-f[j][k]
减去f[j][k]是因为p[1],p[2]都算了f[j][k],所以减去
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int se,ki;
} s[];
int prime[]= {,,,,,,,};
int n;
int p[][][],f[][],Mod,ans;
bool cmp(Node a,Node b)
{
if (a.ki!=b.ki) return a.ki<b.ki;
else return a.se<b.se;
}
int main()
{int i,j,k;
//freopen("1.out","w",stdout);
cin>>n>>Mod;
for (int i=; i<=n; i++)
{
int tmp;
tmp=i;
//cout<<i<<endl;
for (int j=; j<; j++)
{
if (tmp%prime[j]==)
{
s[i].se|=<<j;
while (tmp%prime[j]==) tmp/=prime[j];
}
}
s[i].ki=tmp;
}
sort(s+,s+n+,cmp);
f[][]=;
for (int i=; i<=n; i++)
{
if (i==||s[i].ki==||s[i].ki!=s[i-].ki)
{
for (int j=; j<=; j++)
{
for (int k=; k<=; k++)
{
p[][j][k]=f[j][k];
p[][j][k]=f[j][k];
}
}
}
for (int j=; j>=; j--)
{
for (int k=; k>=; k--)
{
if ((k&s[i].se)==) p[][j|s[i].se][k]=(p[][j|s[i].se][k]+p[][j][k])%Mod;
if ((j&s[i].se)==) p[][j][k|s[i].se]=(p[][j][k|s[i].se]+p[][j][k])%Mod;
}
}
if (i==n||s[i].ki==||s[i].ki!=s[i+].ki)
{
for (int j=; j<=; j++)
{
for (int k=; k<=; k++)
{
f[j][k]=((p[][j][k]+p[][j][k]-f[j][k])%Mod+Mod)%Mod;
}
}
}
}
for (int i=; i<=; i++)
{
for (int j=; j<=; j++)
{
if ((i&j)==)
{
//printf("%d %d %d\n",f[i][j],i,j);
ans=(ans+f[i][j])%Mod;
}
}
}
cout<<ans;
}
[NOI2005]寿司晚宴的更多相关文章
- BZOJ4197[NOI2005]寿司晚宴
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] ...
- HYSBZ 4197 寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- BZOJ 4197: [Noi2015]寿司晚宴( dp )
N^0.5以内的质数只有8个, dp(i, j, k)表示用了前i个大质数(>N^0.5), 2人选的质数(<=N^0.5)集合分别为j, k时的方案数. 转移时考虑当前的大质数p是给哪个 ...
- NOI2015 寿司晚宴
今年NOI确实是在下输了.最近想把当时不会做的题都写一下. 题意 从2到n(500)这些数字中,选若干分给A,若干分给B,满足不存在:A的某个数和B的某个数的GCD不等于1. 对于寿司晚宴这题,标准解 ...
- bzoj 4199 [NOI2015]寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- [BZOJ]4197: [Noi2015]寿司晚宴
Time Limit: 10 Sec Memory Limit: 512 MB Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NO ...
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
随机推荐
- 用virtualenv建立多个Python独立开发环境
不同的人喜欢用不同的方式建立各自的开发环境,但在几乎所有的编程社区,总有一个(或一个以上)开发环境让人更容易接受. 使用不同的开发环境虽然没有什么错误,但有些环境设置更容易进行便利的测试,并做一些重复 ...
- java实现红包的分配算法
个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...
- VS Code 常用命令记录
1. 创建解决方案 例:dotnet new sln -o HelloWorld.Solutions 其中 -o 表示输出文件夹 2.创建类库.web.mvc.webapi等项目 例:dotnet n ...
- 关于python爬虫经常要用到的一些Re.正则表达式
转载:https://blog.csdn.net/skyeyesxy/article/details/50837984 1.正则表达式的常用符号与方法 常用符号:点号,星号,问号与括号(小括号) (. ...
- Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理
1 VMware的安装和使用 注意有 快照 和 克隆 的功能. 快照相当于建立一个 系统还原点, 可以随时恢复到原来状态. 克隆功能可以复制一个和当前一样的系统,并可以选择链接安装,只使用很少的空间就 ...
- LeetCode & Q268-Missing Number-Easy
Array Math Bit Manipulation Description: Given an array containing n distinct numbers taken from 0, ...
- Spring邮件发送2
前言:上一篇博文讲解了邮件发送的基础用法(数据是写死的),然而在实际开发中,大多数情况下邮件内容都是根据业务来动态生成的.所以在此篇博文中,我们将讲解邮件发送携带数据的几种方案. 一.解析自定义占位符 ...
- 点击一次按钮,发生多次ajax请求
项目中遇到了两种情况: 1.点击一次发生两次请求. 原因:submit类型的按钮,默认有提交行为,发生两次提交的原因是在执行完ajax请求后,并没有阻止submit的行为,所以解决方法有两种: a.不 ...
- react-native-image-picker 运用launchCamera直接调取摄像头的缺陷及修复
在前几天用react-native进行android版本开发当中,用到了"react-native-image-picker"的插件:根据业务的需求:点击按钮-->直接调取摄 ...
- angular2 学习笔记 ( 状态管理 state management )
更新 : 2017-12-29 ng5 移除 zone.js https://zhuanlan.zhihu.com/p/29577461 zone 的用途就是拦截游览器事件, 比如 click, a ...