题目

题目大意自己看题去……


正解

比赛时在刚第二题,所以根本没有时间思考……

模型可以转化为从\((x_1,x_2,..,x_n)\)出发到\((1,1)\)的方案数模\(2\)。

方案数就用有重复的排列公式:\(\frac{(\sum{x_i})!}{\prod x_i!}\)

考虑它的奇偶性。显然可以将上面的\(2\)因子个数求出来,减去下面的个数,如果为\(0\)则是奇数。

这个东西也就是下面这条式子:\(\sum_{w=2^i} (\lfloor \frac{\sum_{x_i}}{w} \rfloor-\sum{\lfloor \frac{x_i}{w}\rfloor})\)

显然这条式子是大于等于\(0\)的。我们考虑它是否等于\(0\)。

然后我们就发现,如果有相加的时候有进位,那么它就会对下一位有贡献,而这一位的贡献不变。这意味着上式的值至少加\(1\)。

所以,若要它等于\(0\),一定要保证相加的时候没有进位,也就是每一位上为\(1\)的数至多有\(1\)个。

于是就开始DP:设\(f_{i,S}\)表示从高到低到\(i\)位,\(S\)为贴着上限的状态。

由于有上下界的限制,所以容斥一下就可以了。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mo 990804011
#define ll long long
#define N 9
int n;
ll l[N],r[N],lim[N];
ll ans;
ll f[51][512];
inline void upd(ll &a,ll b){a=(a+b)%mo;}
inline ll calc(){
memset(f,0,sizeof f);
f[50][(1<<n)-1]=1;
for (int i=50;i>=1;--i)
for (int j=0;j<1<<n;++j){
if (!f[i][j])
continue;
int s=0;
for (int l=0;l<n;++l)
if (j>>l&1 && !(lim[l]>>i-1&1))
s|=1<<l;
upd(f[i-1][s],f[i][j]);
for (int k=0;k<n;++k)
if (j>>k&1 && lim[k]>>i-1&1 || !(j>>k&1)){
int s_=s&((-1)^1<<k) | ((j>>k&1 && lim[k]>>i-1&1)?1<<k:0);
upd(f[i-1][s_],f[i][j]);
}
}
ll res=0;
for (int i=0;i<1<<n;++i)
res+=f[0][i];
return res%mo;
}
void dfs(int k,int flag){
if (k==n){
ans+=calc()*flag;
return;
}
lim[k]=r[k];
dfs(k+1,flag);
if (l[k]-1>=0){
lim[k]=l[k]-1;
dfs(k+1,-flag);
}
}
int main(){
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
int T;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
for (int i=0;i<n;++i)
scanf("%lld%lld",&l[i],&r[i]),l[i]--,r[i]--;
ans=0;
dfs(0,1);
ans%=mo;
ans=(ans<0?ans+mo:ans);
printf("%lld\n",ans);
}
return 0;
}

总结

坦白说我的脑子真是太不好了……

[JZOJ6344] 【NOIP2019模拟2019.9.7】Huge Counting的更多相关文章

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

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

  2. 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋

    题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...

  3. 6392. 【NOIP2019模拟2019.10.26】僵尸

    题目描述 题解 吼题但题解怎么这么迷 考虑一种和题解不同的做法(理解) 先把僵尸离散化,h相同的钦(ying)点一个大小 (可以发现这样每种情况只会被算正好一次) 计算完全被占领的方案,然后1-方案/ ...

  4. 6389. 【NOIP2019模拟2019.10.26】小w学图论

    题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...

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

    题目描述 题解 随便bb 详细题解见 https://www.cnblogs.com/coldchair/p/11624979.html https://blog.csdn.net/alan_cty/ ...

  6. 6364. 【NOIP2019模拟2019.9.20】养马

    题目描述 题解 一种显然的水法:max(0,-(点权-边权之和*2)) 这样会挂是因为在中途体力值可能会更小,所以考虑求走完每棵子树所需的至少体力值 考虑从子树往上推求出当前点的答案 设每棵子树从根往 ...

  7. 6362. 【NOIP2019模拟2019.9.18】数星星

    题目描述 题解 一种好想/好写/跑得比**记者还快的做法: 对所有询问排序,按照R递增的顺序来处理 维护每个点最后一次被覆盖的时间,显然当前右端点为R时的答案为所有时间≥L的点的权值之和 LCT随便覆 ...

  8. 6359. 【NOIP2019模拟2019.9.15】小ω的树(tree)(定期重构)

    题目描述 题解 qy的毒瘤题 CSP搞这种码农题当场手撕出题人 先按照边权从大到小建重构树,然后40%暴力修改+查找即可 100%可以定期重构+平衡规划,每次把B个询问拉出来建虚树,在虚树上暴力维护每 ...

  9. 【NOIP2019模拟2019.11.13】旅行 && GDKOI2018 还念(二分答案+dij)

    Description: 题解: 显然满足二分性. 并且每一条边要不选l要不选r. 二分的那条链肯定要选l. 考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快. 安 ...

随机推荐

  1. VS2015 定时服务及控制端

    一.  服务端 如下图—新建项目—经典桌面—Windows服务—起名svrr 2. 打到server1 改名为svrExecSqlInsert 右击对应的设计界面,添加安装服务目录结构如图 3. sv ...

  2. 47-Ubuntu-系统信息-2-df和du查看磁盘和目录空间占用

    序号 命令 作用 01 df -h disk free 显示磁盘剩余空间;-h以人性化的方式显示文件大小 02 du -h [目录名] disk usage 显示目录下的文件大小 注:显示磁盘信息的时 ...

  3. linux每日命令(3):which命令

    这个命令我也神佑体会它的用处,在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which     查看可执行文件的位置. whereis 查看文件的位置. locate ...

  4. 小波变换C代码

    #include <stdio.h> #include <stdlib.h> #define LENGTH 512//信号长度 /*********************** ...

  5. laravel 关掉debug

    修改.env文件 APP_DEBUG=false 然后把Laravel服务重启一下

  6. Redis探索之路(四):Redis的五种数据类型Set和ZSet

    一:Set无需集合 Set是个集合,string类型的无需集合,通过hash table实现,添加删除查找复杂度都是0(1).对集合我们可以取并集,交集和差集.通过这些操作我们可以实现sns中的好友推 ...

  7. C++ 数组作为参数的传递

    //#include <iostream> //#include <conio.h> //using namespace std; // // //void are7(int( ...

  8. Magento获取当前页面URL地址

    Magento获取当前页面URL地址 http://www.sunhaibing.com/?p=1260 在Magento中,可以通过core/url助手类中的getCurrentUrl()方法获取当 ...

  9. TTreeView、TTreeNodes和TTreeNode

    TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够.借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文. TTreeView.TTreeNodes和T ...

  10. IDEA使用的JDK版本1.9换成1.8后,在IDEA中需要改的配置

    今天上午上课spring5使用注解方式的时候,发现jdk9不兼容,果断换jdk8 步骤如下 一.查看Project中的jdk 1.检查Project SDK:中jdk 版本是否为1.8版本 2.检查P ...