题解:

满分的笛卡尔树以后再学吧。。

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】泳池的更多相关文章

  1. [NOI2017]泳池——概率DP+线性递推

    [NOI2017]泳池 实在没有思路啊~~~ luogu题解 1.差分,转化成至多k的概率减去至多k-1的概率.这样就不用记录“有没有出现k”这个信息了 2.n是1e9,感觉要递推然后利用数列的加速技 ...

  2. BZOJ4944: [Noi2017]泳池

    BZOJ4944: [Noi2017]泳池 题目背景 久莲是个爱玩的女孩子. 暑假终于到了,久莲决定请她的朋友们来游泳,她打算先在她家的私人海滩外圈一块长方形的海域作为游泳场. 然而大海里有着各种各样 ...

  3. 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)

    [BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...

  4. [NOI2017]泳池

    题目描述 有一个长为\(n\),高为1001的网格,每个格子有\(p\)的概率为1,\((1-p)\)的概率0,定义一个网格的价值为极大的全一矩形,且这个矩形的底要贴着网格的底,求这个网格的价值为\( ...

  5. Luogu3824 [NOI2017]泳池 【多项式取模】【递推】【矩阵快速幂】

    题目分析: 用数论分块的思想,就会发现其实就是连续一段的长度$i$的高度不能超过$\lfloor \frac{k}{i} \rfloor$,然后我们会发现最长的非$0$一段不会超过$k$,所以我们可以 ...

  6. [学习笔记]Cayley-Hilmiton

    Cayley–Hamilton theorem - Wikipedia 其实不是理解很透彻,,,先写上 简而言之: 是一个知道递推式,快速求第n项的方法 k比较小的时候可以用矩阵乘法 k是2000,n ...

  7. NOI2010~NOI2018选做

    [NOI2010] [NOI2010]海拔 高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割. [NOI2010]航空管制 反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣. ...

  8. UOJ#316. 【NOI2017】泳池

    传送门 一道 \(DP\) 好题 设 \(q\) 为一个块合法的概率 套路一恰好为 \(k\) 的概率不好算,算小于等于 \(k\) 的减去小于等于 \(k-1\) 的 那么设 \(f_i\) 表示宽 ...

  9. LOJ#2304. 「NOI2017」泳池

    $n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...

  10. 「NOI2017」泳池

    DP式子比后面的东西难推多了 LOJ2304 Luogu P3824 UOJ #316 题意 给定一个长度为$ n$高为$ \infty$的矩形 每个点有$ 1-P$的概率不可被选择 求最大的和底边重 ...

随机推荐

  1. Ubuntu14下nginx服务器链接PHP

    报错:nginx下无法打开php,报错[error] 5040#0: *1 connect() failed (111: Connection ref ... server { listen ; #l ...

  2. Ubuntu18系统qt生成程序无法双击运行问题

    1.Ubuntu18 安装qt编译生成的程序文件类型为application/x-sharedlib,无法双击直接运行.文件类型应该为x-executable. 2.解决方法 在.pro文件中添加下面 ...

  3. thymeleaf:访问list,map等

    1.map 在后端放入一个map Map<String, String> mapDict = serviceBaseDict.selectMap(ConstantDictType.SYSI ...

  4. WinCE平台的程序编译到Win32平台下运行

    最近做的项目中,有一个在WinCE平台上跑的程序,后来随着项目的发展,要求此程序在PC上也能跑.感谢VS 2005提供的多平台支持,只需要几分钟就可以解决这个问题,方法很简单,下面是我处理的过程. 1 ...

  5. JsonResponse

    1.JsonResponse class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None ...

  6. 洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]

    传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...

  7. for循环中按条件删除数据元素

    var managerList = [ { id: 0, title: '小小消息的标题1', small: '小小消息内容', newsFlag:true, }, { id: 1, title: ' ...

  8. SQL语句的行列转换

    [一]行转列 1,查询原始的数据 /***这次练习的主题,行转列,列转行***/select * from Scores 2,得到姓名,通过group by select Student as '姓名 ...

  9. JUnit-三角形判断测试

    添加工具 1.添加JUnit测试工具: 使用eclipse自带的JUnit或者下载相关包.使用方式如下: 新建一个项目后,点击next出现以下界面: 选择添加JUnit 选择完成出现以下目录文件: p ...

  10. SQL*Plus工具

    或者