「NOI2015」寿司晚宴 解题报告
「NOI2015」寿司晚宴
这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了..
首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好。
然后发现有个重要的事情是后面每个质因子\(x\)做统计的时候都是独立的,那么单独做就好了
显然要压两个人的前面质因子集合\(f_{i,j}\)代表两个人分别是\(i,j\)集合的答案,然后一块一块的加后面的质因子就好
加每一块时,我们显然需要处理谁选择了这一块或者都没选,再搞个\(dp_{0/1,i,j}\)钦定一下谁选,随便转移一下就好了
Code:
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
const int N=510;
const int pri[9]={0,2,3,5,7,11,13,17,19};
int n,m,p,dp[2][1<<8][1<<8],f[1<<8][1<<8];
inline int add(int a,int b){return a+b>=p?a+b-p:a+b;}
inline int mul(int a,int b){return 1ll*a*b%p;}
struct num
{
int s,pri;
bool friend operator <(num a,num b){return a.pri<b.pri;}
}yuu[N];
int main()
{
read(n),read(p);
for(int i=2;i<=n;i++)
{
yuu[i].pri=i;
for(int j=1;j<=8;j++)
if(i%pri[j]==0)
{
yuu[i].s|=1<<j-1;
while(yuu[i].pri%pri[j]==0) yuu[i].pri/=pri[j];
}
}
std::sort(yuu+2,yuu+n+1);
f[0][0]=1;int U=(1<<8)-1;
for(int i=2;i<=n;i++)
{
if(yuu[i].pri!=yuu[i-1].pri||yuu[i].pri==1)
{
memcpy(dp[0],f,sizeof f);
memcpy(dp[1],f,sizeof f);
}
int sta=yuu[i].s;
for(int s=U;~s;s--)
for(int t=U;~t;t--)
if(!(s&t))
{
if(!(t&sta)) dp[0][s|sta][t]=add(dp[0][s|sta][t],dp[0][s][t]);
if(!(s&sta)) dp[1][s][t|sta]=add(dp[1][s][t|sta],dp[1][s][t]);
}
if(yuu[i].pri!=yuu[i+1].pri||yuu[i].pri==1)
{
for(int s=0;s<=U;s++)
for(int t=0;t<=U;t++)
if(!(s&t))
f[s][t]=add(add(dp[0][s][t],dp[1][s][t]),p-f[s][t]);
}
}
int ans=0;
for(int s=0;s<=U;s++)
for(int t=0;t<=U;t++)
ans=add(ans,f[s][t]);
printf("%d\n",ans);
return 0;
}
2019.3.4
「NOI2015」寿司晚宴 解题报告的更多相关文章
- 【LOJ】#2131. 「NOI2015」寿司晚宴
题解 怎么NOI2015D1--全是一眼秒的sb题--然后我代码全都写跪一遍= = 要是NOI2015是IOI赛制我就可以AK啦(大雾) 代码能力直线下降,NOI2018滚粗预定了啊TAT 我是不是要 ...
- LOJ#2131. 「NOI2015」寿司晚宴
$n \leq 500$,$2-n$这些数字,两个人挑,可以重复挑,问有几种方案中,一个人选的所有数字与另一个人选的所有数字都互质. 不像前两题那么抠脚.. 如果$n$比较小的话,可以把两个人选的数字 ...
- 「FJOI2016」神秘数 解题报告
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...
- 「ZJOI2016」大森林 解题报告
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...
- 「SCOI2016」背单词 解题报告
「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...
- 「SCOI2015」国旗计划 解题报告
「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...
- 「JLOI2015」骗我呢 解题报告?
「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...
- 「JLOI2015」城池攻占 解题报告
「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...
- 「JLOI2015」管道连接 解题报告
「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...
随机推荐
- linux系统下MySQL表名区分大小写问题
linux系统下MySQL表名区分大小写问题 https://www.cnblogs.com/jun1019/p/7073227.html [mysqld] lower_case_table_name ...
- 转:VIM选择文本块/复制/粘贴
VIM选择文本块/复制/粘贴 - lcj_cjfykx的专栏 - CSDN博客https://blog.csdn.net/lcj_cjfykx/article/details/9091569
- docker技术之基本命令
我们使用基本命令之前,先来普及一下操作中使用的基本概念 镜像 image 容器 container 仓库 repository 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运 ...
- pl/sql实现打印九九乘法表
学习PL/SQL循环的时候写的,记录一下. declare v_number1 ); -- 外层循环变量 v_number2 ); -- 内层循环变量 begin .. -- 开始外层循环 loop ...
- Java 验证码详解
1 使用Servlet实现验证码,涉及的知识点主要为java 绘图技术与session保存数据. HTML页面 <html> <image src='images/logo1.jpg ...
- Linux中各个目录作用
对于linux新手来说,最感到迷惑的问题之一就是文件都存在哪里呢?特别是对于那些从windows转过来的新手来说,linux的目录结构看起来有些奇怪哦.比如没有C盘,没有分盘符,一大堆不知道用途的文件 ...
- jQuery 事件 - triggerHandler() 方法
定义和用法 triggerHandler() 方法触发被选元素的指定事件类型.但不会执行浏览器默认动作,也不会产生事件冒泡. triggerHandler() 方法与 trigger() 方法类似.不 ...
- centos5 安装redmine
一.下载依赖包 yum -y install libxslt-devel libyaml-devel libxml2-devel gdbm-devel libffi-devel yum -y inst ...
- zabbix-2.4.5的安装配置与使用
系统最小化安装 环境: zabbix_server 12.1.1.1 zabbix_agent 12.1.1.2 zabbix_proxy 12.1.1.3 1.安装环境: ...
- vue之综合Demo:打沙袋
demo7.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/1 ...