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正解推一推也是能想出来的,就是偶尔手贱

posted @ 2020-09-20 18:22  小又又  阅读(256)  评论(2编辑  收藏  举报