solution-cf1156f

生日前最后一场比赛阿克了,心情好写篇题解。

正文

注意到题目给的限制是什么 $x < y$ 游戏失败。这件事情很好啊,意味着只有 $x \geq y$ 的卡片可以对赢得概率做贡献。还有一个很美好的性质,就是你接下来能取得卡片不用计入状态里面增加额外状态数,原因是假设当前你选了 $x$ 那么你之前选的数都不可能 $> x$ 吧。(好像在说废话)。

大眼瞪完上面的性质之后,考虑设 $f_{i,j}$ 表示你在 $i$ 次抽卡中选到数字 $j$ 后你赢的概率。这里还要对这个状态做一个限制,就是你是第1次选到这个数字。设 $num_i$ 为数字 $i$ 在 $a$ 中出现的次数。所以显然的有 $f_{i,j} = {{num_j-1}\over {n-i}} + \sum \limits_{k=j+1} \limits^{n} f_{i+1,k} \cdot {sum_k \over n -i}$ 这个式子。然后后缀和优化一下即可。

预处理一下逆元,总时间复杂度 $O(n^2)$。

代码

#include<bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const int mininf = 1e9 + 7;
#define int long long
#define pb emplace_back
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
inline void write(int x){if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');}
#define put() putchar(' ')
#define endl puts("")
const int mod = 998244353;
const int MAX = 5e3 + 10;

int a[MAX];
int f[MAX][MAX];
int rt[MAX], sum[MAX];
int inv[MAX];

void solve(){
    int n = read();
    for(int i = 1; i <= n; i++){
        a[i] = read();
        sum[a[i]]++;
    }
    inv[1] = 1;
    for(int i = 2; i <= n; i++){
        inv[i] = inv[mod % i] * (mod - mod / i) % mod;
    }
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; i++){
        rt[a[i]] = i;
    }
    for(int i = n - 1; i >= 1; i--){
        int pre = 0;
        for(int j = n; j >= i; j--){
            if(!sum[j]) continue;
            int tmp2 = inv[n - i];
            f[i][j] = (sum[j] - 1) * tmp2 % mod;
            f[i][j] += pre;
            f[i][j] %= mod;
            pre += f[i + 1][j] * sum[j] % mod * tmp2 % mod;
            pre %= mod;
        }
    }
    int ans = 0;
    int tmp = inv[n];
    for(int i = 1; i <= n; i++){
        ans += f[1][i] * sum[i] % mod * tmp % mod;
        ans %= mod;
    }
    write(ans), endl;
}

signed main(){
    int t = 1;
    while(t--)  solve();
    return 0;
}
posted @ 2023-12-23 15:14  WRuperD  阅读(1)  评论(0编辑  收藏  举报  来源

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容