【考后总结】6 月 NOI 模拟赛 6

Page Views Count

6.27 冲刺国赛模拟 25#

T1 简单计数#

不是古典概型所以不能方案数相除。

考虑枚举第一个选择的位置 i,这样分成两个独立的区间,只关心 k 所在的一个,转移方程:

fn,k=1n1([k<n]+[k>1]+i>kfi1,k+i<k1fn(i+1),k(i+1))

前缀和优化可以做到 O(T+n2)

注意到 k 的限制可以看作两个区间拼起来,具体是 [1,k][k,n]k 没有被选择的概率就是在两个中都没有被选择的概率乘积,这两个事件显然独立。

再注意到此时 k 就是边界位置了,而 fn,1=fn,n 所以只需要求出 fi,1 就行了,答案就是 fn,k=1(1fk,1)(1fnk+1,1),复杂度 O(T+n)

点击查看代码
inline int q_pow(int A,int B,int P){
    int res=1;
    while(B){
        if(B&1) res=1ll*res*A%P;
        A=1ll*A*A%P;
        B>>=1;
    }
    return res;
}

int t;
int n,k;
int inv[maxn];
int f[maxn],g[maxn];

int main(){
    freopen("count.in","r",stdin);
    freopen("count.out","w",stdout);
    inv[1]=1;
    for(int i=2;i<=lim;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
    f[1]=0,f[2]=1;
    int sum=0;
    for(int i=3;i<=lim;++i){
        sum=(sum+f[i-2])%mod;
        f[i]=1ll*inv[i-1]*(1+sum)%mod;
    }
    t=read();
    while(t--){
        int n=read(),k=read();
        printf("%lld\n",(1ll-1ll*(1-f[k]+mod)*(1-f[n-k+1]+mod)%mod+mod)%mod);
    }
    return 0;
}

作者:SoyTony

出处:https://www.cnblogs.com/SoyTony/p/Simulation_Problems_of_NOI_in_June_6.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   SoyTony  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示