「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」寿司晚宴 解题报告的更多相关文章

  1. 【LOJ】#2131. 「NOI2015」寿司晚宴

    题解 怎么NOI2015D1--全是一眼秒的sb题--然后我代码全都写跪一遍= = 要是NOI2015是IOI赛制我就可以AK啦(大雾) 代码能力直线下降,NOI2018滚粗预定了啊TAT 我是不是要 ...

  2. LOJ#2131. 「NOI2015」寿司晚宴

    $n \leq 500$,$2-n$这些数字,两个人挑,可以重复挑,问有几种方案中,一个人选的所有数字与另一个人选的所有数字都互质. 不像前两题那么抠脚.. 如果$n$比较小的话,可以把两个人选的数字 ...

  3. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  4. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  5. 「SCOI2016」背单词 解题报告

    「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...

  6. 「SCOI2015」国旗计划 解题报告

    「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...

  7. 「JLOI2015」骗我呢 解题报告?

    「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...

  8. 「JLOI2015」城池攻占 解题报告

    「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...

  9. 「JLOI2015」管道连接 解题报告

    「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...

随机推荐

  1. Shell脚本2

      5 Shell传递参数 我们可以在执行 Shell 脚本时,向脚本传递参数, 脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… ...

  2. mysql-SQL Error: 1205, SQLState: 41000

    mysql-SQL Error: 1205, SQLState: 41000——CSDN问答频道https://ask.csdn.net/questions/176492 mysql-SQL Erro ...

  3. 给网站配置免费的HTTS证书

    取经自思否:https://segmentfault.com/a/1190000015231137 https 的网站 搜索引擎 会优先收录,所以就抽时间记录下配置博客的过程,各种找资料,终于给我找到 ...

  4. scroll滚动条样式修改

    一般我们有两种情况会出现滚动条,一种是overflow,一种是使用scroll. 当我们需要改变这个滚动条样式的时候,我们需要做以下的修改: html: <div id="style- ...

  5. [转帖]Introduction to text manipulation on UNIX-based systems

    Introduction to text manipulation on UNIX-based systems https://www.ibm.com/developerworks/aix/libra ...

  6. Oracle行列转换case when then方法案例

    select (select name from t_area where id=areaid) 区域, end) 一月, end) 二月, end) 三月, end) 四月, end) 五月, en ...

  7. linux 下crontab -e 命令插入及保存

    由于功能需要,用到linux定时任务. 一般我们都是crontab -e 进去写好定时任务,直接保存退出就可以了,如果是第一次创建定时任务, 系统会选择默认编辑器,就不好保存文件. 在网上参考了一篇文 ...

  8. DAY03、基本数据类型和运算符

    一.基本数据类型的使用 1.整型int: 作用:用来记录年龄.等级.数量 定义:age=18 使用:数学运算与比较运算: 例:print(10>3) print(10/3) 2.浮点型float ...

  9. JQ判断在不同分辨率电脑下使用不同的banner尺寸

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 如何快速定位到DBGrid的某一行!!!急...

    比如我查找张三,那么DBGrid就可以定位到张三那行并选中这行,除了用循环实现还有没有快速定位的方法,谢谢! 解决方案 » to SuperTitan001 那如何找到张三的这行呢?除了用循环还有什么 ...