【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. 【图解】FlexGrid Explorer 全功能问世

    前言 在去年的时候,我们推出了FlexGrid Demo,包含了FlexGrid的常用功能,如分组.滚动.冻结.自定义单元格类型.搜索面板.表格过滤器.树形结构.合并单元等,目前我们又在里面添加很多了 ...

  2. Gunicorn与uWSGI

    Gunicorn与uWSGI perfork perfork是一种服务端编程模型, Nginx, Gunicorn, uWSGI都是这种模型的实现, 简单的说perfok就是master进程启动注册一 ...

  3. Redis进阶学习笔记

    Redis是什么这里不用再说了吧?下面是官方的解释 Redis is an open source (BSD licensed), in-memory data structure store, us ...

  4. MySQL InnoDB下关于MVCC的一个问题的分析

      这个是网友++C++在群里问的一个关于MySQL的问题,本篇文章实验测试环境为MySQL 5.6.20,事务隔离级别为REPEATABLE-READ ,在演示问题前,我们先准备测试环境.准备一个测 ...

  5. restful api与传统api的区别(方式及语法)

    示例:一个状态数据操作接口 传统模式: api/getstate.aspx- 获取状态信息api/updatestate.aspx - 更新状态信息api/deletestate.aspx - 删除该 ...

  6. SqlSessionFactoryUtil

    private static final String RESOURCE="config.xml"; private static final SqlSessionFactory ...

  7. Hystrix是个什么玩意儿

    1. 什么是Hystrix Hystrix是Netflix的一个开源框架,地址如下:https://github.com/Netflix/Hystrix 中文名为“豪猪”,即平时很温顺,在感受到危险的 ...

  8. docker其他参考资料

    https://yeasy.gitbooks.io/docker_practice/image/build.html https://blog.csdn.net/weixin_42596342/art ...

  9. python学习之类的反射

    在学习网络编程的时候用到反射,然后发现自己反射这部分的应用不是很熟练,决定返回来重新整理一下 对于类的反射,主要有四个用法,下面都说一下 1.hasattr 判断对象或者类是否存在指定的属性,看代码以 ...

  10. 23 python初学(模块和包)

    模块(module): 好处: 提高代码可维护性 + 编写代码不必从零开始 模块有三种: python标准库.第三方模块.应用程序自定义模块 另外,使用模块还可以避免函数名和变量名冲突,相同名字的函数 ...