首页 > 其他分享 >iwtgm-18

iwtgm-18

时间:2023-11-12 20:55:55浏览次数:32  
标签:格子 18 ll iwtgm 逆元 ans inv mod

题目链接

C.

首先一列只能有一个黑格子,相邻列可以都有黑格子,只要第一列的第一个(第二个)是黑格子,第二列的第二个(第一个)是黑格子即可
黑格子可以在一列的上方或下方(两种情况)
要注意的是如果是相邻列都有黑格子,那么第一列黑格子的位置确定了那么所有相邻列的黑格子位置都确定了
如果不相邻,那么每一列的黑格子位置互不影响,各有两种方案
所以我们需要讨论相邻和不相邻
k个黑格子也就是k列,可以分成1份、2份...k份(用隔板法,就又避免了讨论小份的个数)
C(k-1,d-1),d是份数,分成d份需要切(d-1)刀,有k-1个位置可以切(两边不可以插入)
然后分成几份就意味着这几份不能相邻
再把他们插入白块的空隔里(同样是用隔板法)
C(n-k+1,d),n-k是白色的列数,因为两边可以插入,所以是n-k+1,d是要放入的份数
最后,每个块有两种摆放方式,不同块之间互不影响,共有2^d种

ll fac[N],inv[N];
const ll mod=998244353;
ll power(ll x,ll y){
    ll ans=1;
    while(y){
        if(y&1)ans=ans*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ans;
}
void init(){
    fac[0]=1;inv[0]=power(1,mod-2);
    for(ll i=1;i<N;i++){
        fac[i]=i*fac[i-1]%mod;inv[i]= power(fac[i],mod-2);
    }
}
ll C(ll x,ll y){
    if(x<y)return 0;
    return fac[x]*inv[y]%mod*inv[x-y]%mod;
}

void solve() {
    int n, k;
    cin >> n >> k;
    if (k == 0) {  // 只有什么都不放一种方案
        cout << "1\n";
        return;
    }
    if (n < k) {  // k太大,放不下
        cout << "0\n";
        return;
    }
    int ans = 0;
    for (int d = 1; d <= k; d++) {
        ans = (ans+((C(k - 1, d - 1) * C(n - k + 1, d))%mod * power(2,d))%mod)%mod;
    }
    cout << ans << "\n";
}

浅谈逆元

逆元仅在所求数与模数互质时存在,如a在p下的逆元,那么a与p必须是互质的
逆元可以理解为是在同余情况下的倒数
设inv(b)为b mod m 意义下的逆元,那么inv(b)相当于1/b(mod m)
那么a/b(mod m)= a/bbinv(b)(mod m)=ainv(b)(mod m)
b
inv(b)与1(mod m)同余
费马小定理:若a与质数p互质,则a^(p-1)与1(mod p)同余
aa^(p-2)与1(mod p)同余,两边同除以a,那么a^(p-2)即为a在模数p下的逆元
也就是说可以通过快速幂求取其逆元
最终式:a/b(mod p)=a
b^(p-2)(mod p)
乘法逆元有两个性质:
①在模特定数的情况下唯一,不存在多解。
②乘法逆元是完全积性函数,也就是说 inv(a)inv(b)=inv(ab)

再看组合数

ll fac[N],inv[N];//阶乘数组,阶乘的逆元数组
const ll mod=998244353;//是质数的模数
ll power(ll x,ll y){//快速幂
    ll ans=1;
    while(y){
        if(y&1)ans=ans*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ans;
}
void init(){
    fac[0]=1;//0的阶乘是1
    inv[0]=power(1,mod-2);//1的逆元
    for(ll i=1;i<N;i++){
        fac[i]=i*fac[i-1]%mod;//递推求阶乘
        inv[i]= power(fac[i],mod-2);//递推求阶乘的逆元
    }
}
ll C(ll x,ll y){
    if(x<y)return 0;//c下方的数比上方的数大,否则不合法
    return fac[x]*inv[y]%mod*inv[x-y]%mod;//把除法变成逆元的乘法
}

标签:格子,18,ll,iwtgm,逆元,ans,inv,mod
From: https://www.cnblogs.com/wwww-/p/17827669.html

相关文章

  • Tenzing and Random Operations CF1842G 题解
    设\(m\)次选的位置分别为\(b_{1\simm}\)。于是答案为\(\mathbbE(\prod\limits_{i=1}^{n}(a_i+\sum\limits_{j=1}^{m}[b_j\lei]\cdotv))=\frac{S}{n^m}\)。首先考虑期望很难做,希望将期望转化为概率形式,发现这样有点困难。再考虑因为所有方案等概率,将求期望转化......
  • [护网杯 2018]easy_tornado 1(两种解法!)
    题目环境:<br/><br/>发现有三个txt文本文件/flag.txt<br/>/welcome.txt<br/>/hints.txt依此点开<br/>flag在/fllllllllllllag文件中<br/>在hints.txt文件中发现md5计算md5(cookie_secret+md5(filename))并且三个文件中都存在filehash(文件名被哈希算法加密32位小......
  • Linux命令(118)之paste
    linux命令之paste1.paste介绍linux命令paste命令是把每个文件以列对列的方式,一列列地加以合并2.paste用法paste[参数]filename...paste参数参数说明-d使用指定的分隔符进行合并-s以行来指定文件3.实例3.1.使用冒号(:)合并文件命令:paste-d:ztj-1.txtztj-2.txt[root@rhel77zt......
  • P1855 榨取kkksc03
    题目思路与解法都与NASA的食物计划https://www.luogu.com.cn/problem/P1507类似是二维01背包#include<bits/stdc++.h>usingnamespacestd;intf[500][500];inta[110],b[110];intmain(){ intx,n,m; cin>>x>>n>>m; for(inti=1;i<=x;i++){ cin>>a......
  • 双非18线小城市二本,成功上岸阿里P7(Android岗)
    前言双非一本、二本能进大厂么?能!自我介绍我,双非18线小城市二本,今年上岸阿里的P7岗(Android)但是作为一个错过秋招,学历不漂亮,实习转正被忽悠,从18线小城市到北京实习,投了上百份简历的苦逼双非学生,还是想说一句:进大厂太难难难难了!!!据说有6成的大学生都相信在毕业十年内能年薪过百万,而......
  • SmargGBD(GB28181设备接入模块)如何对接wvp-gb28181-pro
    技术背景我们在对接SmartGBD(GB28181设备接入模块)的时候,处理常规的海康大华宇视等国标平台外,有些公司会选择wvp-gb28181-pro。众所周知,WEBVIDEOPLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇......
  • parser/../../include/contTimeMC.hh:18:10: fatal error: gsl/gsl_matrix.h: No such
     001、make编译遇到如下问题:parser/../../include/contTimeMC.hh:18:10:fatalerror:gsl/gsl_matrix.h:Nosuchfileordirectory 002、查找该文件(base)[[email protected]]#find/-name"gsl_matrix.h"##系统中确实不存在该文件(base)......
  • 牛客练习赛118
    A.HardKMPProblem#include<bits/stdc++.h>usingnamespacestd;constintN=30;intcnt1[N],cnt2[N];strings,t;voidsolve(){memset(cnt1,0,sizeofcnt1);memset(cnt2,0,sizeofcnt2);cin>>s>>t;for(inti=0;s[i];......
  • 怎么通过LiveNVR流媒体平台配置实现将海康Ehome、ISUP协议统一接入实现Web无插件播放
    @目录1、海康ISUP接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例3、通道配置3.1、直播流接入类型海康ISUP3.2、海康ISUP设备ID3.3、启用保存3.4、接入成功4、相关问题4.1、其它方式接入4.2、如何输出GB281815、RTSP/HLS/FLV/RTMP拉流Onvif流媒......
  • 题解 P4630 [APIO2018] 铁人两项
    具体思路题目问的是三元组\((x,z,y)\)使得\(x\)可以到达\(z\),且\(z\)可以到达\(y\),求三元组\((x,z,y)\)的数量。我们转化一下问题,就是问\(x,y\)之间所有不重复路径的点的并集减\(2\)。显然,无向图中任意一个点都属于一个点双连通分量。那么问题转化为\(x,y\)之......