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 但是我还没有搞懂,先咕着;
标签:ch,20,暴力,ai,20211018,逆元,long,地狱,模拟 来源: https://www.cnblogs.com/sszxlcy/p/15426084.html