[jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)
interlinkage:
https://jzoj.net/senior/#contest/show/2703/3
description:


solution:
考虑容斥原理,枚举不合法的走的步数
$f_{p,x,y}$表示任意走$p$步走到$x$,$y$的方案数
$g_{p,x}$表示走不合法的步走$p$步走到$(10*x,10*x)$的方案数
$g$数组很好得到,发现$f$数组直接暴力转移时间复杂度不对
但是随意走在横轴和竖轴上是独立的,因此我们可以设$fx_{p,x}$表示在横轴上走$p$步走到位置$x$的方案数,同理得到$fy$数组
$f_{p,x,y}=fx_{p,x}*fy_{p,y}$
那么$ans=\sum_{i=0}^{R}\dbinom{R}{i}\sum_{z=0}^{min(Tx,Ty)/10}g_{i,z}*f_{R-i,Tx-10*z,Ty-10*z}$
注意因为零向量不可走,方便处理我们将它加入不可走的数组中即可,因为$0 \mod 10=0$也是成立的
code:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll; const int M=+;
const int mo=1e4+;
int Tx,Ty,Mx,My,R,K;
int fx[M][M],fy[M][M],sum[M],kk[M],g[M][M],C[M][M];
int main()
{
freopen("jump.in","r",stdin);
freopen("jump.out","w",stdout);
scanf("%d%d%d%d%d%d",&Tx,&Ty,&Mx,&My,&R,&K);
for (int j=;j<=Tx;j++) sum[j]=;
for (int i=;i<=R;i++)
{
for (int j=;j<=Tx;j++)
{
if (j>Mx) fx[i][j]=((sum[j]-sum[j-Mx-])%mo+mo)%mo;
else fx[i][j]=sum[j];
}
sum[]=fx[i][];
for (int j=;j<=Tx;j++) sum[j]=(sum[j-]+fx[i][j])%mo;
}
for (int j=;j<=Ty;j++) sum[j]=;
for (int i=;i<=R;i++)
{
for (int j=;j<=Ty;j++)
{
if (j>My) fy[i][j]=((sum[j]-sum[j-My-])%mo+mo)%mo;
else fy[i][j]=sum[j];
}
sum[]=fy[i][];
for (int j=;j<=Ty;j++) sum[j]=(sum[j-]+fy[i][j])%mo;
}
for (int i=;i<=K;i++) scanf("%d",&kk[i]);kk[++K]=;
g[][]=;
for (int k=;k<=R;k++)
{
for (int i=;*i<=min(Tx,Ty);i++)
{
for (int j=;j<=K;j++)
if (i>=kk[j]/)
{
(g[k][i]+=g[k-][i-kk[j]/])%=mo;
}
}
}
C[][]=;
for (int i=;i<=R;i++)
{
C[i][]=;
for (int j=;j<=i;j++) C[i][j]=(C[i-][j-]+C[i-][j])%mo;
}
int ans=;
for (int i=;i<=R;i++)
{
if (i&)
{
for (int z=;z*<=min(Tx,Ty);z++) (ans-=1ll*C[R][i]*g[i][z]%mo*fx[R-i][Tx-*z]%mo*fy[R-i][Ty-*z]%mo)%=mo;
}
else
{
for (int z=;z*<=min(Tx,Ty);z++) (ans+=1ll*C[R][i]*g[i][z]%mo*fx[R-i][Tx-*z]%mo*fy[R-i][Ty-*z]%mo)%=mo;
}
}
ans=(ans%mo+mo)%mo;
printf("%d\n",ans);
return ;
}
[jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)的更多相关文章
- [JZOJ 5912] [NOIP2018模拟10.18] VanUSee 解题报告 (KMP+博弈)
题目链接: https://jzoj.net/senior/#contest/show/2530/2 题目: 众所周知,cqf童鞋对哲学有着深入的理解和认识,并常常将哲学思想应用在实际生活中,例如锻炼 ...
- [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)
题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...
- [JZOJ 5895] [NOIP2018模拟10.5] 旅游 解题报告 (欧拉回路+最小生成树)
题目链接: https://jzoj.net/senior/#main/show/5895 题目: 题解: 有一个好像比较显然的性质,就是每条边最多经过两次 那么我们考虑哪些边需要经过两次.我们把需要 ...
- [JZOJ 5906] [NOIP2018模拟10.15] 传送门 解题报告(树形DP)
题目链接: https://jzoj.net/senior/#contest/show/2528/2 题目: 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传 ...
- [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)
题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才. ...
- [JZOJ 5894] [NOIP2018模拟10.5] 同余方程 解题报告(容斥)
题目链接: http://172.16.0.132/senior/#contest/show/2523/0 题目: 题解:(部分内容来自https://blog.csdn.net/gmh77/arti ...
- 模拟赛T2 交换 解题报告
模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...
- [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)
题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...
- [jzoj 4668] [NOIP2016提高A组模拟7.19] 腐败 解题报告(质数分类+慢速乘)
题目链接: http://172.16.0.132/senior/#main/show/4668 题目: 题解: 考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因 ...
随机推荐
- webpack打包css自动添加css3前缀
为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...
- JavaScript的面向对象
JavaScript的对象 对象是JavaScript的一种数据类型.对象可以看成是属性的无序集合,每个属性都是一个键值对,属性名是字符串,因此可以把对象看成是从字符串到值的映射.这种数据结构在其他语 ...
- 使用原生JS实现简单的ajax
Ajax是一种使用javascript内置对象向服务器发送请求/接收响应的技术.它可以再页面已经完全显示出来之后再和服务器进行少量的数据交互,所以可以实现局部内容的刷新. ajax的实现,主要是靠ja ...
- Hoj_平方和与立方和
平方和与立方和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- easyui的datetimebox时间格式化详解
今天公司让用easyui的datetimebox组件,而且还要让格式化成大家通用的那种,网上搜了很多,但差不多都是复制黏贴的,最后请教了下螃蟹. 感谢螃蟹抽空给做了个例子,现在拿出来和大家分享下,效果 ...
- css—文字渐变色
.text-gradient { display: inline-block; color: green; font-size: 10em; font-family: ´微软雅黑´; backgrou ...
- python调用函数实现数据的增删改查(2)
1 添加数据 def add(): # 输入姓名,年龄,电话 name=raw_input('name:') age=raw_input('age:') phone=raw_input('phone ...
- js中时间戳与日期时间之间的相互转换
1.时间戳转换为标准日期时间格式: function timeFormat(dateStr) { var date = new Date(dateStr); Y = date.getFullYear( ...
- php实现多图上传功能
总共三个文化 index.html conn.php upload.php index.html代码: <html> <head>上传文件</head> & ...
- tomcat-manager 设置
tomcat默认是没有用户登录控制的,需要登录manager,则需要配置角色与用户 1. 在conf/tomcat-users.xml中添加 <role rolename="manag ...