4.2 省选模拟赛 流浪者 容斥dp


求出期望 所有情况很好搞 C(n+m-2,n-1).
也就是说求出所有情况的和乘以上面总方案的逆元即可。
可以发现所有情况和经过多少个障碍点有关 和所处位置无关。
简单的设f[i]表示从1,1到n,m经过i个障碍点的方案数。
可以发现求出这个数组就得到了答案。
发现每过一个障碍点 体力就会除以2 所以过掉log个障碍点 以后体力都是1.
我们只需要求出log个取值即可。
由于障碍点之间是单向关系 所以可以从左到右dp f[i][j]表示前i个点经过了j个障碍点的方案数。
转移?f[k][j-1]?不能这样做 显然这样会有重复 我上午也思考了很久。
考虑容斥 从1,1到当前点总方案已知 -不合法方案:到达当前点经过了多余j个障碍点的方案+少于j个的方案。
观察后面的形式 我们已经推出j-1了 所以后面的已知。
前者多余j个的方案 f[k][j+1]...f[k][j+w]?显然还是会重复。
代表元容斥 考虑一条路径到达i这个点多余了j个点的这样的路径 必然存在到达i之间的某个点的状态为j 这样不管怎么走最后到i都是不合法的。
所以有f[k][j]发现这些方案不可能交叉 这也叫做代表元容斥 最小状态表示总体。
总复杂度K^2log 最后还要再多加一个点n,m来合并答案。(其实是求出一个障碍点都不经过的方案。
数组不要开小了 别像我这个傻屌一样。
const ll MAXN=200010;
ll n,m,maxx,s,w,cc;
ll f[MAXN][22],v[MAXN];//f[i][j]表示前i个点经过了j个点的方案数 第i个点必过.
struct wy{ll x,y;}t[MAXN];
ll fac[MAXN],inv[MAXN];
inline ll ksm(ll b,ll p)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%mod;
b=b*b%mod;p=p>>1;
}
return cnt;
}
inline ll C(ll a,ll b){if(b>a)return 0;return fac[a]*inv[b]%mod*inv[a-b]%mod;}
inline void prepare()
{
fac[0]=1;
rep(1,maxx,i)fac[i]=fac[i-1]*i%mod;
inv[maxx]=ksm(fac[maxx],mod-2);
fep(maxx-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
}
inline ll cmp(wy a,wy b){return a.x==b.x?a.y<b.y:a.x<b.x;}
inline ll V(ll x,ll y)
{
ll w=t[y].x+t[y].y-t[x].x-t[x].y;
return C(w,t[y].x-t[x].x);
}
signed main()
{
freopen("rover.in","r",stdin);
freopen("rover.out","w",stdout);
get(n);get(m);get(w);get(s);
maxx=n+m;prepare();
rep(1,w,i)
{
ll get(x);ll get(y);
t[i]=(wy){x,y};
}
ll ww=s;v[0]=s;
while(1)
{
ww=(ww>>1)+(ww&1);
if(ww==1)break;
v[++cc]=ww;
}
++w;++cc;
t[w]=(wy){n,m};
sort(t+1,t+w+1,cmp);
rep(1,w,i)
{
ll sum=0;
rep(1,cc,j)
{
f[i][j]=C(t[i].x+t[i].y-2,t[i].x-1)-sum;
rep(1,i-1,k)
{
if(t[k].x<=t[i].x&&t[k].y<=t[i].y)
f[i][j]=(f[i][j]-f[k][j]*V(k,i)%mod)%mod;
}
sum=(sum+f[i][j])%mod;
}
}
ll sum=C(n+m-2,n-1);
ll ans=0;
rep(1,cc,i)
{
sum=(sum-f[w][i])%mod;
ans=(ans+f[w][i]*v[i-1])%mod;
}
ans=((ans+sum)%mod+mod)%mod;
putl(ans*ksm(C(n+m-2,n-1),mod-2)%mod);
return 0;
}
4.2 省选模拟赛 流浪者 容斥dp的更多相关文章
- 省选模拟赛 4.26 T1 dp 线段树优化dp
LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...
- 5.29 省选模拟赛 树的染色 dp 最优性优化
LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...
- 4.26 省选模拟赛 T3 状压dp 差分求答案
LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- FCS省选模拟赛 Day1
Description Solution T1 shopping 目测是插板法乱搞一下 发现题解写的是容斥dp: \[ ans = \sum_i (-1)^ig[i] \] \(g[i]\)表示的有 ...
- HDU 5794 A Simple Chess (容斥+DP+Lucas)
A Simple Chess 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5794 Description There is a n×m board ...
- [CF1086E]Beautiful Matrix(容斥+DP+树状数组)
给一个n*n的矩阵,保证:(1)每行都是一个排列 (2)每行每个位置和上一行对应位置不同.求这个矩阵在所有合法矩阵中字典序排第几.考虑类似数位DP的做法,枚举第几行开始不卡限制,那么显然之前的行都和题 ...
- 【BZOJ3622】已经没有什么好害怕的了 容斥+DP
[BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...
随机推荐
- #pragma comment(linker,"/SECTION:shared,RWS")
Windows在一个Win32程序的地址空间周围筑了一道墙.通常,一个程序的地址空间中的数据是私有的,对别的程序而言是不可见的.但是执行多个执行实体表示了程序的所有执行实体之间共享数据是毫无问题的.当 ...
- 成熟度模型:企业规模化推广敏捷和DevOps利器
摘要: 本文介绍了成熟度模型在软件开发行业的应用,重点阐述了成熟度模型对于敏捷和DevOps在企业中进行规模化推广的价值,探讨了成熟度模型的设计原则,并对于如何明智使用成熟度模型给出了建议. 导言 在 ...
- 《串并行数据结构与算法(SML语言)实验》题解
注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关. 第一题: 题意: 对n个数升序排序. 题解: 快排,不解释. 代码(省略了输入输出函数,下同): val n = getInt ...
- bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*
bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...
- HDFS+ClickHouse+Spark:从0到1实现一款轻量级大数据分析系统
在产品精细化运营时代,经常会遇到产品增长问题:比如指标涨跌原因分析.版本迭代效果分析.运营活动效果分析等.这一类分析问题高频且具有较高时效性要求,然而在人力资源紧张情况,传统的数据分析模式难以满足.本 ...
- 公众号迁移 原有数据库openid 更新主体openid
今天一个两年前做的公众号项目 要更改主体,随之而来的是公众号的迁移. 公众号迁移后关注的粉丝也会对应的进行迁移,还会给粉丝发送相关通知. 大体流程如下图 迁移的具体步骤我就不细说了.今天主要说的是 迁 ...
- SpringCloud全家桶介绍及手绘架构
文章目录 概述 一.业务场景介绍 二.Spring Cloud核心组件:Eureka 三.Spring Cloud核心组件:Feign 四.Spring Cloud核心组件:Ribbon 五.Spri ...
- html-webpack-plugin在html中插入数据
html-webpack-plugin在html中插入数据 <!DOCTYPE html> <html> <head> <meta charset=" ...
- 产品升级前后MD5码对比
在做产品测试的时候,经常会需要对比升级前后的MD5码,这时可以通过终端登录设备,具体步骤如下: 1.在升级前时,将MD5码写入log1.info文件: check_md5 -d / -w log1.i ...
- IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line...
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...