ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20211018地狱模拟赛

2021-10-19 19:33:11  阅读:153  来源: 互联网

标签:ch 20 暴力 ai 20211018 逆元 long 地狱 模拟


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

昨天考的那叫一个惨呀,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 但是我还没有搞懂,先咕着;

 

标签:ch,20,暴力,ai,20211018,逆元,long,地狱,模拟
来源: https://www.cnblogs.com/sszxlcy/p/15426084.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有