正题


题目大意

定义函数f(x)(xf(x)(xf(x)(x为一个序列)))
若任意一个xi=1x_i=1xi​=1那么有f(x)=1f(x)=1f(x)=1
若有一个xi=0x_i=0xi​=0那么有f(x)=0f(x)=0f(x)=0
其他的,有f(x)=(∑j=1nf(x1...,xj−1,...xn))%2f(x)=(\sum_{j=1}^nf(x_{1}...,x_j-1,...x_n))\% 2f(x)=(j=1∑n​f(x1​...,xj​−1,...xn​))%2
给出li,ril_i,r_ili​,ri​,求∑li≤xi≤rif(x)\sum_{l_i\leq x_i\leq r_i} f(x)li​≤xi​≤ri​∑​f(x)


解题思路

我们发现对于xxx有f(x)=∏i=1n−1C∑xjxif(x)=\prod_{i=1}^{n-1}C_{\sum x_j}^{x_i}f(x)=∏i=1n−1​C∑xj​xi​​
然后又有CnkC_{n}^kCnk​为奇数仅当(n+k)&k=k(n+k)\&k=k(n+k)&k=k
然后转换为f(x)=1f(x)=1f(x)=1的充要条件就是对于任意的1≤i≠j≤n1\leq i\neq j\leq n1≤i̸​=j≤n有(xi+xj)&xi=xi(x_i+x_j)\& x_i=x_i(xi​+xj​)&xi​=xi​,证明

然后我们数位dpdpdp,用fi,jf_{i,j}fi,j​表示到第iii位时状态jjj中0表示没有到达上界,111表示到达了上界。

对于lil_ili​,我们可以对nnn维进行容斥即可。

时间复杂度O(50∗n∗(2n)2)O(50*n*(2^n)^2)O(50∗n∗(2n)2)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=10,XJQ=990804011;
ll T,n,l[N],r[N],x[N],f[60][1<<N],ans,MS;
ll solve(ll S)
{for(ll i=0;i<n;i++){x[i]=((S>>i)&1)?(l[i]-1):r[i];if(x[i]<0) return 0;}memset(f,0,sizeof(f));f[51][0]=1;for(ll i=50;i>=0;i--){for(ll j=0;j<MS;j++){if(!f[i+1][j]) continue;ll now=0;for(ll k=0;k<n;k++)now|=(1<<k)*(x[k]>>i&1);(f[i][j|now]+=(__builtin_popcount(j)+1)*f[i+1][j]+XJQ)%=XJQ;for(ll k=0;k<n;k++)if((now&(~j))>>k&1)(f[i][j|(now^(1<<k))]+=f[i+1][j]+XJQ)%=XJQ;}}ll ans=0;for(ll i=0;i<MS;i++)(ans+=f[0][i]+XJQ)%=XJQ;return ans;
}
int main()
{freopen("c.in","r",stdin);freopen("c.out","w",stdout);scanf("%lld",&T);while(T--){scanf("%lld",&n);MS=1<<n;ans=0;for(ll i=0;i<n;i++)scanf("%lld%lld",&l[i],&r[i]),l[i]--,r[i]--;for(ll i=0;i<MS;i++)(ans+=(__builtin_popcount(i)&1?XJQ-solve(i):solve(i))+XJQ)%=XJQ;printf("%lld\n",ans);}
}

jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】相关推荐

  1. jzoj5990. 【北大2019冬令营模拟2019.1.6】Bear (状压dp)

    题面 题解 我永远讨厌dp.jpg 搞了一个下午优化复杂度最后发现只要有一个小trick就可以A了→_→.全场都插头dp就我一个状压跑得贼慢-- 不难发现我们可以状压,对于每一行,用状态\(S\)表示 ...

  2. YbtOJ#20239-[冲刺NOIP2020模拟赛Day10]连边方案【状压dp】

    正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/3 题目大意 求有多少个nnn个点mmm条边的无向图满足 有连边的点之间编号差不超过kkk 所有 ...

  3. 【2022国赛模拟】无损加密——LGV引理、状压DP

    原创题无来源 题目描述 题解 首先把问题稍作简化,我们可以最后把行列式乘上所有 dkd_kdk​ 的积的 nnn 次方,这样前面的过程就不用考虑 dkd_kdk​ 了,暴力也只需要变动 [lk,rk] ...

  4. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  5. 【THUWC2019模拟2019.1.18】Counting

    Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V (V<=100)个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两 ...

  6. 6009. 【THUWC2019模拟2019.1.18】Counting

    题意: 羽月最近发现,她发动能力的过程是这样的: 构建一个 VVV 个点的有向图 GGG,初始为没有任何边,接下来羽月在脑中构建出一个长度为 EEE 的边的序列,序列中元素两两不同,然后羽月将这些边依 ...

  7. jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)

    Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...

  8. 6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]

    题目 题目大意 有个无限长的数列an{a_n}an​,a1=1a_1=1a1​=1,an=an−1+maxdightk(an−1)a_n=a_{n-1}+maxdight_k(a_{n-1})an​= ...

  9. jzoj6343-[NOIP2019模拟2019.9.7]Medium Counting【记忆化dfs,dp】

    正题 题目大意 给出nnn个字符串SiS_iSi​,然后有些???号可以进行随便填字母. 然后要求Si<Si+1S_i<S_{i+1}Si​<Si+1​的情况下求方案数. 解题思路 ...

最新文章

  1. Linux常用命令汇总(持续更新中)
  2. 双线程猜数字 TwoThreadGuessNumber.java
  3. 为什么小程序裂变,最终都变成了利益驱动?
  4. 数据结构与算法 / 排序算法 / 基本概念
  5. leetcode最小面积_每日一道 LeetCode (51):盛最多水的容器
  6. quartus状态机生成_生成器作为(快速失败)状态机
  7. guice 框架_玩! 框架+ Google Guice
  8. 背景选择器selector替换按钮默认背景
  9. ZZULIOJ 1103: 平均学分绩点(函数专题)
  10. linux内核IDR机制详解【转】
  11. 数据库设计规范 zhuan
  12. 【7005】二叉树的遍历问题2
  13. 谷歌医疗AI商业化提速!Jeff Dean亲自挖来大总管
  14. Android中解析XML的方法
  15. Mac最好用的RSS阅读器Reeder使用方法
  16. 科技文献检索课题 计算机,科技文献检索课题.doc
  17. java常用工具下载
  18. python 爬虫 美女_使用Python爬虫爬取网络美女图片
  19. DeBUG|实例化servlet类xxxx异常
  20. PHP版三合一收款码_附50多款模板源码

热门文章

  1. python string length_如何使用python获取字符串长度?哪些方法?
  2. Linux网络模块全局变量,()不是Linux系统的特色.
  3. 7-6 区间覆盖 (10 分)(思路+详解)Come 宝!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  4. Java使用TCP实现群聊 聊天室(多线程和tcp的使用)
  5. Java中关于省略作用域报错问题分析
  6. [JavaWeb-XML]XML_解析_解析方式
  7. 《C++ Primer》8.1.2节练习
  8. 2019年第十届蓝桥杯国赛B组试题A-平方序列-枚举
  9. JAVA中小细节(易忽视和易错点)
  10. 用python处理excel的基本语法_《使用python3读取处理excel表的数据内容如何对内容求平均值》 用python读取excel文件...