20211018地狱模拟赛

好的晚自习这么早就跑过来干博客了,今天还在努力的改昨天的题;

昨天考的那叫一个惨呀,30分,第一题不会逆元放弃,第二题暴力都写挂了只有搜索有10分,第三题暴力勉强20分啊啊啊~~~痛苦~~~

好的今天总结一下常见的数学知识:

第一题:

每一个点在一前面出现的概率为ai/(ai+a1),

所以答案为∑ni=2    ai*ai/(ai+a1)+1,我们就把式子同分,然后再求逆元取模,

而求逆元又是一个重点,逆元有三种求法,拓欧,费马,线性推,

在这里的连加上还有一种方法参考洛谷逆元2,只用跑一次快速幂

接下里就十分简单了:

复制代码
#include<bits/stdc++.h>
using namespace std;
const long long N=1e7;
const long long p=1e9+7;
long long a[N],fac[N],ifac[N];
inline long long read()
{
    static char ch;
    long long res=0,sign=1;
    while((ch=getchar())<'0'||ch>'9'){
        if(ch=='-') sign=-1;
    }
    res=ch-'0';
    while((ch=getchar())>='0'&&ch<='9'){
        res=res*10+ch-'0';
    }
    return res*sign;
}
long long Inv(long long x,long long a){
    long long ans=1;
    while(x){
        if(x&1){
            ans=(long long)ans*a%p;
        }
        a=(a*a)%p;
        x>>=1;
    }
    return ans%p;
}
signed main()
{
    long long n;
    n=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    long long res=a[1];
    fac[1]=1;
    for(int i=2;i<=n;i++) fac[i]=(fac[i-1]*(a[i]+a[1])%p)%p;
    ifac[n]=Inv(p-2,fac[n]);
    for(int i=n-1;i;i--) ifac[i]=(ifac[i+1]*(a[i+1]+a[1])%p)%p;
    for(int i=2;i<=n;i++) ifac[i]=(ifac[i]*(fac[i-1])%p)%p;
    for(int i=2;i<=n;i++) {
        res=(res+(a[i]*a[i])%p*ifac[i]%p)%p;
    }
    printf("%lld",res);
}
复制代码

然后是第二题,我就暴力求了一个逆序对可以友20分,然而我只有10分

具体实现要用dp 但是我还没有搞懂,先咕着;

 

posted @   SSZX_loser_lcy  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示