[JZOJ6344] 【NOIP2019模拟2019.9.7】Huge Counting
题目
题目大意自己看题去……
正解
比赛时在刚第二题,所以根本没有时间思考……
模型可以转化为从\((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的更多相关文章
- jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)
Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...
- 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋
题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...
- 6392. 【NOIP2019模拟2019.10.26】僵尸
题目描述 题解 吼题但题解怎么这么迷 考虑一种和题解不同的做法(理解) 先把僵尸离散化,h相同的钦(ying)点一个大小 (可以发现这样每种情况只会被算正好一次) 计算完全被占领的方案,然后1-方案/ ...
- 6389. 【NOIP2019模拟2019.10.26】小w学图论
题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...
- 6377. 【NOIP2019模拟2019.10.05】幽曲[埋骨于弘川]
题目描述 题解 随便bb 详细题解见 https://www.cnblogs.com/coldchair/p/11624979.html https://blog.csdn.net/alan_cty/ ...
- 6364. 【NOIP2019模拟2019.9.20】养马
题目描述 题解 一种显然的水法:max(0,-(点权-边权之和*2)) 这样会挂是因为在中途体力值可能会更小,所以考虑求走完每棵子树所需的至少体力值 考虑从子树往上推求出当前点的答案 设每棵子树从根往 ...
- 6362. 【NOIP2019模拟2019.9.18】数星星
题目描述 题解 一种好想/好写/跑得比**记者还快的做法: 对所有询问排序,按照R递增的顺序来处理 维护每个点最后一次被覆盖的时间,显然当前右端点为R时的答案为所有时间≥L的点的权值之和 LCT随便覆 ...
- 6359. 【NOIP2019模拟2019.9.15】小ω的树(tree)(定期重构)
题目描述 题解 qy的毒瘤题 CSP搞这种码农题当场手撕出题人 先按照边权从大到小建重构树,然后40%暴力修改+查找即可 100%可以定期重构+平衡规划,每次把B个询问拉出来建虚树,在虚树上暴力维护每 ...
- 【NOIP2019模拟2019.11.13】旅行 && GDKOI2018 还念(二分答案+dij)
Description: 题解: 显然满足二分性. 并且每一条边要不选l要不选r. 二分的那条链肯定要选l. 考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快. 安 ...
随机推荐
- java-day26
## DOM简单学习:为了满足案例要求 * 功能:控制html文档的内容 * 获取页面标签(元素)对象:Element * document.getElementByI ...
- <爬虫>相关的知识
1.概念.工具和HTTP 什么是爬虫 模拟客户端发送网络请求,获取响应,按照规则提取数据 爬虫的数据去哪了 展示到网页上(百度新闻,今日头条) 进行分析,从数据中寻找规律(指数网站:百度指数) 需要的 ...
- Match & Catch CodeForces - 427D 后缀自动机水题
题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度. 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 ...
- htons(), ntohl(), ntohs(),htons()这4个函数(摘)
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数.网络字节顺序与本地字节顺序之间的转换 ...
- angularJS select下拉框检测改变
html:(已引入amazeUI) <div style="width:70px;display:inline-block;"> <form class=&quo ...
- Level DB 小调研
一. 概况: 1. 背景: 随着信息技术的高速发展,数据存储量和流量呈现爆炸式增长.目前百度统计日 PV(日点击量)已超过 75 亿次,中国网民在百度上进行50 亿次的搜索请求,百度贴吧日 PV 十亿 ...
- ES6模块化使用遇到的问题
前言 最近在学习ES6模块化时,遇到了一些问题,通过查询相关资料得以解决,本篇随笔详细记录了解决方法. 具体内容 以下定义一个模块common.js 在test.html中引入上述定义的模块 运行上述 ...
- mui请求数据接口问题
今天我在本地模拟做一个数据请求,第一次用的mui自带的方法来请求数据,当时我的本地接口地址是http://localhost:8087/jeecg/sightseerController.do?che ...
- Dart编程语法
语法定义了一组用于编写程序的规则.每种语言规范都定义了自己的语法.Dart语法有如下内容组成: 变量和运算符 类 函数 表达式和代码块 判断和循环结构 注释 库和包 类型定义 数据结构表示:集合/泛型 ...
- 2019.7.3模拟 七星连珠(行列式+随机+k进制FWT)
题目大意: 给一个\(n*n\)的矩阵,对于所有排列p,记录\(a[i][p[i]]\)的k进制下不进位加法的结果,问所有被记录过的数. \(n<=50,p=2.3,0<=a[i][j]& ...