【CF1151F】Sonya and Informatics(动态规划,矩阵快速幂)

题面

CF

题解

考虑一个暴力\(dp\)。假设有\(m\)个\(0\),\(n-m\)个\(1\)。设\(f[i][j]\)表示当前做到了第\(i\)个操作,前\(m\)个元素中有\(j\)个\(1\)的方案数。

转移就枚举交换哪两个东西就可以了。

把转移用矩阵优化就可以做到\(O(n^3logK)\)。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 105
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,N,K,z,C[MAX][MAX],a[MAX];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
struct Matrix
{
int s[MAX][MAX];
void clear(){memset(s,0,sizeof(s));}
void init(){clear();for(int i=0;i<=N;++i)s[i][i]=1;}
int*operator[](int x){return s[x];}
}A,B;
Matrix operator*(Matrix a,Matrix b)
{
Matrix c;c.clear();
for(int i=0;i<=N;++i)
for(int j=0;j<=N;++j)
for(int k=0;k<=N;++k)
c[i][j]=(c[i][j]+1ll*a[i][k]*b[k][j])%MOD;
return c;
}
Matrix fpow(Matrix a,int b){Matrix s;s.init();while(b){if(b&1)s=s*a;a=a*a;b>>=1;}return s;}
int main()
{
n=read();K=read();
for(int i=1;i<=n;++i)a[i]=read(),z+=a[i]^1;
for(int i=0;i<=n;++i)C[i][0]=1;
for(int i=1;i<=n;++i)
for(int j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
int s=0;
for(int i=1;i<=n;++i)if(i<=z&&a[i])++s;
/*
f[0][s]=1;
for(int i=1;i<=K;++i)
for(int j=0;j<=n-z&&j<=z;++j)
if(f[i-1][j])
{
add(f[i][j],1ll*f[i-1][j]*(C[z][2]+C[n-z][2])%MOD);
add(f[i][j],1ll*f[i-1][j]*j%MOD*(n-z-j)%MOD);
add(f[i][j],1ll*f[i-1][j]*(z-j)%MOD*j%MOD);
add(f[i][j-1],1ll*f[i-1][j]*j%MOD*j%MOD);
add(f[i][j+1],1ll*f[i-1][j]*(z-j)%MOD*(n-z-j)%MOD);
}
*/
N=min(n-z,z);
B[0][s]=1;
for(int i=0;i<=N;++i)
{
add(A[i][i],(C[z][2]+C[n-z][2])%MOD);
add(A[i][i],1ll*i*(n-z-i)%MOD);
add(A[i][i],1ll*(z-i)*i%MOD);
if(i)add(A[i][i-1],1ll*i*i%MOD);
if(i<N)add(A[i][i+1],1ll*(z-i)*(n-z-i)%MOD);
}
B=B*fpow(A,K);
int ans=1ll*B[0][0]*fpow(fpow(n*(n-1)/2,K),MOD-2)%MOD;
printf("%d\n",ans);
return 0;
}

【CF1151F】Sonya and Informatics(动态规划,矩阵快速幂)的更多相关文章

  1. poj 3744 Scout (Another) YYF I - 概率与期望 - 动态规划 - 矩阵快速幂

      (Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...

  2. hdu 2604 Queuing(动态规划—>矩阵快速幂,更通用的模版)

    题目 最早不会写,看了网上的分析,然后终于想明白了矩阵是怎么出来的了,哈哈哈哈. 因为边上的项目排列顺序不一样,所以写出来的矩阵形式也可能不一样,但是都是可以的 //愚钝的我不会写这题,然后百度了,照 ...

  3. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  4. BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)

    考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...

  5. BZOJ5298 CQOI2018交错序列(动态规划+矩阵快速幂)

    显然答案为Σkb·(n-k)a·C(n-k+1,k).并且可以发现ΣC(n-k,k)=fibn.但这实际上没有任何卵用. 纯组合看起来不太行得通,换个思路,考虑一个显然的dp,即设f[i][j][0/ ...

  6. BZOJ4887 Tjoi2017可乐(动态规划+矩阵快速幂)

    设f[i][j]为第i天到达j号城市的方案数,转移显然,答案即为每天在每个点的方案数之和.矩乘一发即可. #include<iostream> #include<cstdio> ...

  7. CF1151F Sonya and Informatics(概率期望,DP,矩阵快速幂)

    明明是水题结果没切掉……降智了…… 首先令 $c$ 为序列中 $0$ 的个数,那么排序后序列肯定是前面 $c$ 个 $0$,后面 $n-c$ 个 $1$. 那么就能上 DP 了.(居然卡在这里……) ...

  8. 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)

    [BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...

  9. 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)

    [BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...

随机推荐

  1. Android为TV端助力linux命令

    从命令行push到系统目录,用户组是root,而代码里面的是个人用户组,所以要把你push进去的东西改成跟你APK一样的用户组,并且chmod -R 777 文件名修改文件的权限 修改用户组chown ...

  2. 如何正确使用Espresso来测试你的Android程序

    UI测试在Android平台上一直都是一个令人头痛的事情, 由于大家平时用的很少, 加之很多文档的缺失, 如果很多东西从头摸索,势必踩坑无数. 自Android24正式淘汰掉了Instrumentat ...

  3. Docker Data Center系列(二)- UCP安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...

  4. sqlmap 基本应用

    sqlmap 基本应用: sqlmap详细命令: -is-dba 当前用户权限(是否为root权限) -dbs 所有数据库 -current-db 网站当前数据库 -users 所有数据库用户 -cu ...

  5. python--类属性-实类属性--静态方法总结

    类属性--类方法 实类属性--实类方法 静态方法

  6. 英语口语练习系列-C01-好棒

    古诗 来自百度 It's cool. It is neat. It's righteous! It's righteous! 酷毙了! righteous是 cool 的高级了 如果一件事让你无法用 ...

  7. JS中的闭包(closure)

    JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面就是我的学习笔记,对于Javascript初学者应该是很有用 ...

  8. linux -- 添加、修改、删除路由

    在日常的使用中,或者在服务器中,有两个网卡配置两个地址,访问不同的网络段,这种情况是非常常见的现象,但是,我们需要额外的添加路由表来决定发送的数据包经过正确的网关和interface才能正确的进行通信 ...

  9. java 项目打jar包,用cmd运行,并且编写运行脚本

    项目是ideal编辑器的springboot项目的demo.打包就是在侧边栏,点击packge ,就会在target下生成jar包. 生成之后把 jar包放在一个文件夹中.新建一个txt文件,在txt ...

  10. centos7下kubernetes(15。kubernetes-外网访问service)

    kubernetes提供了多种类型的service,默认是cluster IP ClusterIP cluster内部IP对外提供服务,只有cluster内的节点和pod可访问,这是默认的servic ...