20200920数论模拟
T1:写了40分挂了,不知道为啥,和mx写的一样,对拍答案一样,就是挂了。
正解:一个数对答案贡献的价值,取决于他在第几个被放进去。曾经拿竞赛题去为难班主任的时候,sy教我多变量变成单变量想,先想一个数a第x次放进A的贡献:$a \times $ $\sum_{i=x+1}^{n \times m+1} \frac{1}{i}$(提前感谢whh对本博客的大力支持)
由一个数的一个位置推出一个数的所有位置:$\frac{a}{n \times m}$ $\times$ $\sum_{i=2}^{n \times m+1} \sum_{j=i}^{n \times m+1}\frac{1}{j}$
再由一个数的所有位置推出所有数的所有位置:$\frac{\sum_{i=1}^{n} a}{n \times m}$ $\times$ $\sum_{i=2}^{n \times m+1} \sum_{j=i}^{n \times m+1}\frac{1}{j}$
代码明天去学校看whh代码写o(*////▽////*)q:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #define ll long long 5 using namespace std; 6 const int maxn=2e7+10,mod=998244353; 7 int n,m,a; 8 ll inv[maxn]; 9 void solve(){ 10 inv[1]=1; 11 for (int i = 2;i <= n*m+1;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; //线性求逆元 12 } 13 int main(){ 14 scanf ("%d%d",&n,&m); 15 solve();ll tmp=0,sum=0; 16 for (int i = m*n+1;i >= 2;i--){ 17 tmp+=inv[i]; tmp%=mod; 18 sum+=tmp;sum%=mod;//维护逆元合 19 } 20 sum=(sum*inv[m*n])%mod; 21 ll ans=0; 22 for (int i = 1;i <= n;i++){ 23 scanf ("%d",&a); 24 ans+=a;ans%=mod; 25 } 26 (ans*=m)%=mod; 27 printf("%lld\n",ans*sum%mod); 28 return 0; 29 }
T2:写了30分,也挂了,输出double型("%llf")就是手贱多打个l我也是很强,$l$==$r$的时候很显然,$n$个$l$比大小就好了
正解没懂,明天上学再问问
T3:暴力20分,正解先鸽了
T4:写的时候自己也不知道能写多少,但是过了30分,正解继续鸽
几道题的暴力都很显然,感觉T1正解推一推也是能想出来的,就是偶尔手贱