【NOI2017】泳池
题解:
满分的笛卡尔树以后再学吧。。
40分还是比较好想的
但是状态挺复杂的
直接贴代码了
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define IL inline
#define rint register ll
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
ll n,k,x,y;
ll mo=;
ll f[][][][][][][][];
ll ans=;
void js(ll &x,ll y)
{
x=(x+y)%mo;
}
void gcd(ll x,ll y,ll &a,ll &b)
{
if (y==)
{
a=; b=; return;
}
gcd(y,x%y,b,a);
b=b-a*(x/y);
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
cin>>n>>k>>x>>y;
ll x1,y1;
gcd(y,mo,x1,y1);
ll pp=(x*x1)%mo;
int p[];
p[]=;
rep(i,,k) p[i]=(p[i-]*pp)%mo;
rep(i,,k) p[i]=(p[i]*(1ll-pp))%mo;
if (n==)
{
cout<<(p[k]%mo+mo)%mo<<endl;
return ;
}
f[][][][][][][][]=;
rep(i,,n)
{
ll kk=i%,tt=(i+)%;
me(f[kk]);
rep(i,,k)
{
rep(i1,,k)
{
if ((i1+(i>=))>k) break;
rep(j1,,k/)
{
if ((j1+(i>=))*>k) break;
rep(i2,,k/)
{
if ((i2+(i>=))*>k) break;
rep(j2,,k/)
{
if ((j2+(i>=))*>k) break;
rep(i3,,k/)
{
if ((i3+(i>=))*>k) break;
rep(j3,,)
{
if (j3==&&i>=) break;
rep(k1,,)
{
bool t=;
if ((i1+(i>=))==k) t=;
if ((j1+(i>=))*==k) t=;
if ((i2+(i>=))*==k) t=;
if ((j2+(i>=))*==k) t=;
if ((i3+(i>=))*==k) t=;
if (i==k) t=;
js(f[kk][(i>=)?i1+:][(i>=)?j1+:][(i>=)?i2+:][(i>=)?j2+:][(i>=)?i3+:][i>=][k1|t],
f[tt][i1][j1][i2][j2][i3][j3][k1]*p[i]);
int ans1=;
ans1++;
}
}
}
}
}
}
}
}
}
rep(i1,,)
rep(j1,,)
rep(i2,,)
rep(j2,,)
rep(i3,,)
rep(j3,,)
js(ans,f[n%][i1][j1][i2][j2][i3][j3][]);
cout<<(ans%mo+mo)%mo<<endl;
return ;
}
【NOI2017】泳池的更多相关文章
- [NOI2017]泳池——概率DP+线性递推
[NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...
- BZOJ4944: [Noi2017]泳池
BZOJ4944: [Noi2017]泳池 题目背景 久莲是个爱玩的女孩子. 暑假终于到了,久莲决定请她的朋友们来游泳,她打算先在她家的私人海滩外圈一块长方形的海域作为游泳场. 然而大海里有着各种各样 ...
- 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)
[BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...
- [NOI2017]泳池
题目描述 有一个长为\(n\),高为1001的网格,每个格子有\(p\)的概率为1,\((1-p)\)的概率0,定义一个网格的价值为极大的全一矩形,且这个矩形的底要贴着网格的底,求这个网格的价值为\( ...
- Luogu3824 [NOI2017]泳池 【多项式取模】【递推】【矩阵快速幂】
题目分析: 用数论分块的思想,就会发现其实就是连续一段的长度$i$的高度不能超过$\lfloor \frac{k}{i} \rfloor$,然后我们会发现最长的非$0$一段不会超过$k$,所以我们可以 ...
- [学习笔记]Cayley-Hilmiton
Cayley–Hamilton theorem - Wikipedia 其实不是理解很透彻,,,先写上 简而言之: 是一个知道递推式,快速求第n项的方法 k比较小的时候可以用矩阵乘法 k是2000,n ...
- NOI2010~NOI2018选做
[NOI2010] [NOI2010]海拔 高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割. [NOI2010]航空管制 反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣. ...
- UOJ#316. 【NOI2017】泳池
传送门 一道 \(DP\) 好题 设 \(q\) 为一个块合法的概率 套路一恰好为 \(k\) 的概率不好算,算小于等于 \(k\) 的减去小于等于 \(k-1\) 的 那么设 \(f_i\) 表示宽 ...
- LOJ#2304. 「NOI2017」泳池
$n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...
- 「NOI2017」泳池
DP式子比后面的东西难推多了 LOJ2304 Luogu P3824 UOJ #316 题意 给定一个长度为$ n$高为$ \infty$的矩形 每个点有$ 1-P$的概率不可被选择 求最大的和底边重 ...
随机推荐
- 分布式服务管理框架 ZooKeeper
核心功能 统一命名服务(Name Service) 通过有层次的目录结构产生唯一的名称,同时可以将名称关联到特定资源 配置管理(Configuration Management) ...
- GDOI2018 涛涛摘苹果 [CDQ分治]
传送门我会让你知道哪里有题面吗(逃 思路 显然不能模拟苹果下掉的过程,考虑计算每个苹果对询问的贡献. 显然一开始就有的苹果可以看做第0天变出来的,于是只需要考虑变出来的苹果了. 设当前询问节点\(x\ ...
- 任意N位二进制的补码实现——队列存放
正在学习计算机组织与结构,为了写一些底层的算术操作模拟,比如一个二进制补码数的加减乘除,发现这很麻烦,因为不管是什么语言,都只提供了8位.32.64位等部分位数的补码形式,那么怎么实现任意任意位的补码 ...
- Java二叉树的实现与特点
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...
- 关于STM32 __IO 的变量定义
这个_IO 是指静态 这个 _IO 是指静态 volatile uint32_t 是指32位的无符号整形变量uint32_t 是指32位的无符号整形变量: 搞stm32这么久了,经常看到stm32里面 ...
- 坚持:学习Java后台的第一阶段,我学习了那些知识
最近的计划是业余时间学习Java后台方面的知识,发现学习的过程中,要学的东西真多啊,让我一下子感觉很遥远.但是还好我制定了计划,自己选择的路,跪着也要走完!关于计划是<终于,我还是下决心学Jav ...
- Confluence 6 数据库和临时目录
数据库 所有的其他数据库,包括有页面,内容都存储在数据库中.如果你安装的 Confluence 是用于评估或者你选择使用的是 Embedded H2 Database 数据库.数据库有关的文件将会存储 ...
- Confluence 6 升级自定义的站点和空间布局
随着 Confluence 的演变.默认的站点和空间布局也会随着 Confluence 升级而让使用的所有页面进行改变.随着一些新功能的加入和一些老功能的修改,默认的布局也需要进行修改来支持这些改变. ...
- python 爬虫简化树状图
- 【JDK】JDK模块化(1)-为什么要模块化
Java9发布已经有一年了,跟Java8相比,从目录对比就看得出来差别相当大. 实际上Java9最大的变化就是JDK模块化(Modular). 那么,模块化的目的是什么呢? 官方的说法是: 之前版本的 ...