[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 的选手,也被 ...
随机推荐
- 通过运行一个tomcat容器来记录下初学docker常用的几个命令---容器篇
1.查看容器列表 显示正在运行的容器: [root@localhost HMK]# docker ps 显示所有容器,包括未运行的: [root@localhost HMK]# docker ps - ...
- 2017-2018-1 Java演绎法 第三周 作业
团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...
- Git学习使用
1.注册码云并建立远程仓库 2.安装git 3.使用eclipse egit 推送以及克隆 建立本地仓库,成功后如图 推送项目至本地仓库与远程仓库 使用右键菜单team-share 选项,与仓库关联后 ...
- Python多线程案例
from time import ctime,sleep import threading def music(): for i in range(2): print ("I was lis ...
- Android 4.4 沉浸式透明状态栏
原文链接:http://www.bkjia.com/Androidjc/913061.html 第一种方法 这里写代码片第一种方法,在代码设置: if(VERSION.SDK_INT >= VE ...
- segmentedControl设置字体和字体颜色问题
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor],UITextAttributeT ...
- Angular 学习笔记 ( CDK - Layout )
简单说就是 js 的 media query. 1. BreakpointObserver const layoutChanges = this.breakpointObserver.observe ...
- SiteMesh入门(1-1)SiteMesh是什么?
1.问题的提出 在开发Web 应用时,Web页面可能由不同的人参与开发,因此开发出来的界面通常千奇百怪.五花八门,风格难以保持一致. 为了统一界面的风格,Struts 框架提供了一个标签库Tiles ...
- django的模型类管理器-----------数据库操作的封装
模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...
- Lua编写wireshark插件初探——解析Websocket上的MQTT协议
一.背景 最近在做物联网流量分析时发现, App在使用MQTT协议时往往通过SSL+WebSocket+MQTT这种方式与服务器通信,在使用SSL中间人截获数据后,Wireshark不能自动解析出MQ ...