传送链接

E. Number of Components

  • 当时思博了。。一直在想对于\([1,r]\)的联通块和\([1,l-1]\)的联通块推到\([l,r]\)的联通块...我真的是傻了。。这题明明很水啊..换做以前肯定是可以做出来的!(flag*1)
    由于是一条链,那么我们考虑就算一个联通块中的最小节点为\(i\)对答案所产生的贡献...不就是满足\(i\)而不满足\(i-1\)的\([l,r]\)区间有多少个吗!(我真的好菜啊!这题明明很水!

F. Sonya and Informatics

  • 神仙吧这题!一直以为自己是懂矩阵优化DP的。。现在发现自己知道的东西真的只是一点皮毛而已呢!woc。。瞬间不想继续颓废下去了

    一看这个数据范围\(n \leq 100,k \leq 10^9\)

    矩阵乘法!

    我们先考虑一个肥肠暴力的\(dp\)再考虑矩阵乘法优化 因为如果你要搞出一个非下降的那么一定是\(0\)在前面而\(1\)在后面的
    设一共有\(zero\)个\(0\),\(one\)个\(1\)
    那么我们就可以设\(dp[i][j]\)表示第\(i\)次操作使得前面\(zero\)个数中有\(j\)个\(0\)的方案数
    最后所求即为\[\frac{dp[k][zero]}{(n*(n-1)/2)^{k}}\]
    转移应该也还蛮好懂的趴!
    \(dp[i][j]\) 可以转移到\(dp[i+1][j-1],dp[i+1][[j],dp[i+1][j+1]\)
    那菜鸡博主就举个例子

    \(dp[i][j] \Rightarrow dp[i+1][j]\) 一步操作,前面\(zero\)里面\(0\)的个数并没有改变,那么一定是下面的请况

    • \(1\)与\(1\)交换了 方案数为\(one*(one-1)/2\)
    • \(0\)与\(0\)交换了 方案数为\(zero*(zero-1)/2\)
    • 前面\(zero\)个数中\(0\)与\(1\)交换了 方案数为\(i*(zero-i)\)
    • 后面的数\(0\)与\(1\)交换了 方案数为\((zero-i)*( one-(zero-i) )\)

    转移即为

    \[dp[i+1][j]=dp[i][j]*(one*(one-1)/2+zero*(zero-1)/2+i*(zero-i)+(zero-i)*(one-(zero-i)))\]

    但是这个复杂度是\(O(nk)\)哒 显然过不了嘛

    矩阵优化也很容易转换(好吧。对于我这只菜鸡来说并不QwQ.

    事实上,这题是将转移的系数进行了优化(不知道这么说对不对。。)

    好像准确地来说应该是概率

    即对于一个矩阵\(A[i][j]\) 表示从前\(zero\)个数中\(0\)的个数由\(i\)变成\(j\)的方案数

    我们可以直接预处理出\(A[i][i],A[i][i+1],A[i][i-1]\) 这是转移一次的

    转移\(k\)次 即将\(A\)这个矩阵乘个\(k\)遍就行了 矩阵快速幂用一下即可.

​ 贴个代码趴!

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define ll long long
using namespace std;
const int N=110,mod=1e9+7;
struct data{
    ll a[N][N];
}qx;
ll qwq,inv;
int n,k,b[N];

void Add(ll &x,ll y){
    x=(x+y)%mod;
}

void Mul(ll &x,ll y){
    x=(x*y)%mod;
}

ll add(ll x,ll y){
    return (x+y)%mod;
}

ll mul(ll x,ll y){
    return x*y%mod;
}

ll q_pow(ll x,int y){
    ll ans=1;
    for(;y;y>>=1){
        if(y&1) Mul(ans,x);
        Mul(x,x);
    }
    return ans;
}

data cal(data A,data B){
    data C;
    fr(i,0,n) fr(j,0,n){
        C.a[i][j]=0;
        fr(k,0,n) Add(C.a[i][j],mul(A.a[i][k],B.a[k][j]));
    }
    return C;
}

data ksm(data A,int y){
    data B;
    fr(i,0,n) fr(j,0,n) B.a[i][j]=(i==j);
    for(;y;y>>=1){
        if(y&1) B=cal(A,B);
        A=cal(A,A);
    }
    return B;
}

ll cal(ll x){
    return mul(mul(x,x-1),qwq);
}

int main(){
    scanf("%d%d",&n,&k);
    qwq=q_pow(2,mod-2),inv=q_pow(q_pow(cal(n),mod-2),k);
    int zero=0,one=0;
    fr(i,1,n){
        scanf("%d",&b[i]);
        if(b[i]) one++;
         else zero++;
    }
    int nw=0;
    fr(i,1,zero) if(!b[i]) nw++;
    data gg;
    fr(i,0,zero){
        if(n-zero-zero+i<0) continue;
        gg.a[i][i]=add(add(add(cal(zero),cal(one)),mul(i,zero-i)),mul(zero-i,one-zero+i));
        gg.a[i][i+1]=mul(zero-i,zero-i);
        if(i) gg.a[i][i-1]=mul(i,one-zero+i);
    }
    // fr(i,0,zero) fr(j,0,zero){
    //  printf("a[%d][%d]=%lld\n",i,j,gg.a[i][j]);
    // }
    gg=ksm(gg,k);
    ll ans=mul(gg.a[nw][zero],inv);
    cout<<ans<<endl;
    return 0;
}

Codeforces1151E,F | 553Div2 | 瞎讲报告的更多相关文章

  1. Codeforces1101 | EducationalRound58 | 瞎讲报告

    目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division an ...

  2. Codeforces70 | Codeforces Beta Round #64 | 瞎讲报告

    目录 前言 正文 A B C D E 前言 这个毒瘤的517 放了Div1 然后D题是昨天讲的动态凸包(啊喂!我还没来的及去写 结果自己想的是二分凸包 (当然没有写出来 写完前两题之后就愉快地弃疗 C ...

  3. AtCoder | ARC103 | 瞎讲报告

    目录 ARC 103 A.//// B.Robot Arms C.Tr/ee D.Distance Sums ARC 103 窝是传送门QwQ A.//// 题意 : 给你\(n\)(\(n\)为偶数 ...

  4. AtCoder | ARC102 | 瞎讲报告

    目录 ARC102 前言 正文 传送链接~ ARC102 前言 实在是太菜了....写完第一题就弃疗..感觉T3好歹也是道可做题吧!!然后T2怎么又是进制拆分! 正文 A 题意 给你两个数字\(n,k ...

  5. Codeforces1084 | Round526Div2 | 瞎讲报告

    目录 A. The Fair Nut and Elevator B.Kvass and the Fair Nut C.The Fair Nut and String D.The Fair Nut an ...

  6. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  7. [牛客网练习赛 45 F] Magic Slab 解题报告 (最大权闭合子图)

    interlinkage: https://ac.nowcoder.com/acm/contest/847/F description: solution: 最大权闭合子图; 每个单元格看成一个正权点 ...

  8. [NOIP2018模拟赛10.25]瞎搞报告

    闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...

  9. golang代码中生成pprof和trace报告

    // 生成 CPU 报告 import ( "context" "runtime/pprof" "log" ) func cpuProfil ...

随机推荐

  1. 「GXOI / GZOI2019」与或和

    题目 广西和贵州的省选?好像很神仙的样子啊 之后发现这是一道水题 我们显然应该拆位考虑 显然我们应该对于每一位都拆一下看看这一位是\(0/1\) 显然我们如果找到一个全是\(1\)的矩阵,那么这一位的 ...

  2. 20145203 盖泽双《Java程序设计》第一周的学习总结

    20145203 盖泽双<Java程序设计>第一周学习总结 教材学习内容总结 第一章 1.Java是一门完全面向对象,安全可靠,与平台无关的编程语言. 2.Java现由Java SE.Ja ...

  3. Mac OS X 命令行用户应当知道的八个终端工具

    原文链接:Eight Terminal Utilities Every OS X Command Line User Should Know OS X  的Terminal 终端开辟了强大的UNIX实 ...

  4. Manifest XML signature is not valid(安装ClickOnce签名未通过验证)

    转载:http://stackoverflow.com/questions/12826798/manifest-xml-signature-is-not-valid 安装时,我的问题:  PLATFO ...

  5. css学习之LInk & import

    一.用link加载外部样式表 1.放置位置:放在head元素中 2.样式表中只能包含样式规则,不能包含其他标记语言.如出现了标记,会导致其中一部分或全部被忽略. 3.type = 'text/css' ...

  6. 探索photo-sphere-viewer全景插件

    此插件是一位外国人写的,官网API地址:https://photo-sphere-viewer.js.org/#methods 我只是记录下我在使用此插件时用到的方法和相关属性,以防以后忘记 1.按要 ...

  7. nRF52832 改变ATT_MTU提高蓝牙数据发送速率(nRF5_SDK_14.2.0)

    nRF52832 作为一个低功耗蓝牙芯片,其数据发送发送速率一直都偏低(高就不叫低功耗了^_^),作为初学者在网上找了很多资料,终于找到通过修改ATT_MTU来提升发送速率的方法,最快能达到8.2KB ...

  8. VC编译连接选项详解

    VC编译连接选项详解 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在“使用”它,而不会想去“了解”它.因为它只是一个工具,我们宁可把更多的精力 ...

  9. 【BZOJ1044】[HAOI2008]木棍分割

    [BZOJ1044][HAOI2008]木棍分割 题面 bzoj 洛谷 题解 第一问显然可以二分出来的. 第二问: 设\(dp[i][j]\)表示前\(i\)个,切了\(j\)组的方案数 发现每次转移 ...

  10. SQL Server 小数类型(float 和 decimal)

    在SQL Server中,实际上小数数值只有两种数据类型:float 和 decimal,分别是近似数值和精确数值.其他小数类型,都可以使用float和decimal来替代,例如,双精度(double ...