Uoj 129 寿司晚宴
Uoj 129 寿司晚宴
- 显然合法性只与每个数所含的质因子有关,考虑状压 \(dp\) 若记录所有质因子状态显然爆炸,注意到每个数最多有一个超过 \(\sqrt 500\) 的大质因子,而其他的小质因子只有 \(8\) 种.所以可以对小质因子状压,大质因子单独考虑.
- 记 \(f[j][k]\) 表示当前第一个人选择的数含有质因子的集合为 \(j\) ,第二个人的为 \(k\) 时的方案数.
- \(g[0/1][j][k]\) 表示当前第一个人选择的数含有质因子的集合为 \(j\) ,第二个人的为 \(k\) ,把这个大质因子放入第一个/第二个人中的方案数.
- 计算时,若新加入的大质数与上一个不同,就将 \(f\) 赋值到 \(g\) 中.
- 然后\(dp\) 计算 \(g\) .
- 若新加入的大质数与下一个不同,就根据 \(g\) 计算 \(f\) ,计算时要减去一次两个都不放的情况.
- 时间复杂度为 \(O(8^8)\),在 \(1e7\) 的级别,因为很多状态不合法,不会有取模运算,常数较小,可以通过.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
fh=-1,jp=getchar();
while (jp>='0'&&jp<='9')
out=out*10+jp-'0',jp=getchar();
return out*fh;
}
const int MAXP=8,MAXS=(1<<8)+10,MAXN=520;
const int lim=1<<8;
int prime[]= {2,3,5,7,11,13,17,19};
int f[MAXS][MAXS],g[2][MAXS][MAXS];
int n,P;
inline int add(int a,int b)
{
return (a + b) % P;
}
inline int mul(int a,int b)
{
return 1LL * a * b % P;
}
void upd(int &x,int y)
{
x=add(x,y);
}
struct node
{
int s;
int bp;//大质因子
bool operator < (const node &rhs) const
{
return bp<rhs.bp;
}
} a[MAXN];
void init(int i)
{
int x=i;
int s=0;
for(int j=0; j<MAXP; ++j)
{
if(x%prime[j]==0)
{
s|=1<<j;
while(x%prime[j]==0)
x/=prime[j];
}
}
a[i].s=s;
a[i].bp=x;
}
int main()
{
n=read(),P=read();
for(int i=2; i<=n; ++i)
init(i);
f[0][0]=1;
int ans=0;
sort(a+2,a+2+n-1);
for(int i=2; i<=n; ++i)
{
if(i==2 || a[i].bp==1 || a[i].bp!=a[i-1].bp)
{
memcpy(g[0],f,sizeof f);
memcpy(g[1],f,sizeof f);
}
for(int j=lim-1; j>=0; --j)
for(int k=lim-1; k>=0; --k)
{
if(j&k)
continue;
if(!(a[i].s & k))
upd(g[0][j|a[i].s][k],g[0][j][k]);
if(!(a[i].s & j))
upd(g[1][j][k|a[i].s],g[1][j][k]);
}
if(i==n || a[i].bp==1 || a[i].bp!=a[i+1].bp)
{
for(int j=lim-1; j>=0; --j)
for(int k=lim-1; k>=0; --k)
{
if(j&k)
continue;
f[j][k]=add(add(g[0][j][k],g[1][j][k]),P-f[j][k]);
if(i==n)
upd(ans,f[j][k]);
}
}
}
cout<<ans<<endl;
return 0;
}
Uoj 129 寿司晚宴的更多相关文章
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ...
- 【UOJ#129】 【NOI2015】寿司晚宴
题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ...
- 【NOI2015】寿司晚宴
题目链接:http://uoj.ac/problem/129 描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. ...
- BZO4197 & 洛谷2150 & UOJ129:[NOI2015]寿司晚宴——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4197 https://www.luogu.org/problemnew/show/P2150 ht ...
- 【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] ...
- BZOJ4197[NOI2005]寿司晚宴
Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...
- 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是给哪个 ...
随机推荐
- 转 : JBoss Web和 Tomcat的区别
JBoss Web和 Tomcat的区别 在Web2.0的浪潮中,各种页面技术和框架不断涌现,为服务器端的基础架构提出了更高的稳定性和可扩展性的要求.近年来,作为开源中间件的全 球领导者,JBoss在 ...
- 1-25-循环控制符break、continue和函数详解
大纲: 1-for循环补充 1-1-for循环实战---类C格式应用 2-break.continue循环控制符 2-1实战:帮助理解break.continue作用 3-函数详解 3-1.脚本文件中 ...
- Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache
1.事件描述:CentOS7下使用tree命令,发现该命令没有被安装,在安装的过程中发现yum报错 1 2 3 4 5 [root@openstack-01 ~]# tree -d bash: tre ...
- [转载]各种java生成word解决方案的优缺点对比
解决方案 优点 缺点 Jacob 功能强大 直接调用VBA接口,程序异常复杂:服务器必须是:windows系统+安装Office:服务器端自动化com接口容易产生死进程造成服务器宕机 Apache P ...
- 【hive】解析json格式字符串
(1)解析json中的单个属性 get_json_object(json_str,’$.xxx’/‘$[xxx]’) get_json_object函数第一个参数填写json对象变量(string) ...
- Git的三种区域
Git的区域分为 工作区.缓存区.本地仓库区 我们先看一张图 GitTest是我本地的一个仓库, 其中GitTest目录就是我们的工作区,但不包括.git这个目录 而.git这个目录就是本 ...
- [感悟]马士兵Java自学之路——(精华版)
JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...
- Docker的大坑小洼(二)
再谈<Docker的大坑小洼> 今天闲暇看了一下宏亮同学写的一篇<Docker的大坑小洼>,非常受启发.因为Docker的文章真的很多了,但大家如果只是玩一玩,有很多坑是不会碰 ...
- netcat 安装 及netcat 命名介绍
netcat 安装 https://blog.csdn.net/transformer_wsz/article/details/77624087 http://www.cnblogs.com/php- ...
- Spring简单与数据库连接
1.导入需要的jar包 2.配置数据源,在applicationContext.xml文件中增加配置 方式1:直接使用bean方式 1 2 3 4 5 6 <bean id="data ...