[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为二进制数来保存情况,状压dpf[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],所以减去
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct Node 7 { 8 int se,ki; 9 } s[1201]; 10 int prime[8]= {2,3,5,7,11,13,17,19}; 11 int n; 12 int p[3][601][601],f[601][601],Mod,ans; 13 bool cmp(Node a,Node b) 14 { 15 if (a.ki!=b.ki) return a.ki<b.ki; 16 else return a.se<b.se; 17 } 18 int main() 19 {int i,j,k; 20 //freopen("1.out","w",stdout); 21 cin>>n>>Mod; 22 for (int i=1; i<=n; i++) 23 { 24 int tmp; 25 tmp=i; 26 //cout<<i<<endl; 27 for (int j=0; j<8; j++) 28 { 29 if (tmp%prime[j]==0) 30 { 31 s[i].se|=1<<j; 32 while (tmp%prime[j]==0) tmp/=prime[j]; 33 } 34 } 35 s[i].ki=tmp; 36 } 37 sort(s+2,s+n+1,cmp); 38 f[0][0]=1; 39 for (int i=2; i<=n; i++) 40 { 41 if (i==2||s[i].ki==1||s[i].ki!=s[i-1].ki) 42 { 43 for (int j=0; j<=255; j++) 44 { 45 for (int k=0; k<=255; k++) 46 { 47 p[1][j][k]=f[j][k]; 48 p[2][j][k]=f[j][k]; 49 } 50 } 51 } 52 for (int j=255; j>=0; j--) 53 { 54 for (int k=255; k>=0; k--) 55 { 56 if ((k&s[i].se)==0) p[1][j|s[i].se][k]=(p[1][j|s[i].se][k]+p[1][j][k])%Mod; 57 if ((j&s[i].se)==0) p[2][j][k|s[i].se]=(p[2][j][k|s[i].se]+p[2][j][k])%Mod; 58 } 59 } 60 if (i==n||s[i].ki==1||s[i].ki!=s[i+1].ki) 61 { 62 for (int j=0; j<=255; j++) 63 { 64 for (int k=0; k<=255; k++) 65 { 66 f[j][k]=((p[1][j][k]+p[2][j][k]-f[j][k])%Mod+Mod)%Mod; 67 } 68 } 69 } 70 } 71 for (int i=0; i<=255; i++) 72 { 73 for (int j=0; j<=255; j++) 74 { 75 if ((i&j)==0) 76 { 77 //printf("%d %d %d\n",f[i][j],i,j); 78 ans=(ans+f[i][j])%Mod; 79 } 80 } 81 } 82 cout<<ans; 83 }
转载于:https://www.cnblogs.com/Y-E-T-I/p/7204037.html
[NOI2005]寿司晚宴相关推荐
- 周末狂欢赛4(1-02E. JM的西伯利亚特快专递,寿司晚宴,荷马史诗)
文章目录 T1:1-02E. JM的西伯利亚特快专递 题目 题解 code T2:寿司晚宴 题目 题解 code T3:荷马史诗 题目 题解 code T1:1-02E. JM的西伯利亚特快专递 题目 ...
- [NOI2015]寿司晚宴(状压dp)
为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1,其中第种 ...
- BZOJ4197: [Noi2015]寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- Bzoj4197 寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- [NOI2015]寿司晚宴(状态压缩动态规划)
题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1 ...
- BZOJ 4197 NOI 2015 寿司晚宴
题面 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 ...
- 题解报告——寿司晚宴
题目传送门 题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3 ...
- NOI 2015 寿司晚宴
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 813 Solved: 508 [Submit][Status] ...
- 【BZOJ4197】寿司晚宴,状态压缩DP
Time:2016.06.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 比较巧妙的处理方法 关于互质这个问题很多都是出现在数论题目里 显然这个不是-- 看到500这个数据范围 ...
最新文章
- C语言 文件操作10--配置文件读写
- Sound Mixer Fader
- Promise 的使用
- 【错误记录】Visual Studio 编译 C++ 代码报错 ( To disable deprecation, use _CRT_SECURE_NO_WARNINGS. )
- 解决ZooKeeper集群搭建 [myid:1] - WARN [QuorumPeer[myid=1]:QuorumCnxManager@685] - Cannot open channel
- 【C++】45.尽量不要在构造函数中调用函数或开启线程
- 模型参数优化(二):粒子群优化
- 临床研究数据分析的6种常用方法
- android产品设计,Android产品设计
- hdu2019——数列有序解题报告
- apicloud使用指南
- 【2018.3.17】模拟赛之一-ssl2574jzoj1368 无限序列【斐波那契数列】
- 【VBS】网页脚本的放置位置与载入时机
- js-document对象
- C++自学14:关系运算符(bool/std::boolalpha)
- c语言 乘号 指针 避免,C语言指针篇(一)指针与指针变量
- 韩顺平Java基础入门笔记-第一章
- linux如何自定义桌面,如何自定义 GNOME 3 桌面? | Linux 中国
- MP3 文件格式解析
- 4个步骤让你空手套白狼,零投资净赚百万!颠覆传统的商业思维!