洛谷P9217

首先要知道什么元素能作为最大值,只有a0和大于a[0]的a[i]+s,将数组a降序排列,当a[i]+s<=a[0]时可以break了,后序都不能作为最大值
a[0]能作为最大元素,分两种情况,一种就是a[0]+s,另一种就是在+s>a[0]的a[i]都没加上s,对于每一位>0的i,当最大元素概率都是前边元素失败概率下
取模除法,要乘模逆元,-取模要加上mod再取模
include <bits/stdc++.h>
using namespace std;
define int long long
int a[200010];
const int mod=998244353;
int modpow(int a, int b) {
int res = 1;
a %= mod;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int inv(int x) {
return modpow(x, mod - 2);
}
void solve()
{
int n,p,q,s,i,j;
cin >> n >> p >> q >> s;
for(i=0;i<n;i++)
cin >> a[i];
p=p(inv(q))%mod;
sort(a,a+n,greater
int ans=0,w=1;
for(i=0;i<n;i++)
{
if(a[i]+s<a[0]) break;
ans=(ans+w
(w=(1-p+mod)%mod)%=mod;
}
cout << 2 << "\n";
cout << (ans+w*a[0]%mod)%mod << "\n";
return ;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
//int t;
//cin >> t;
//while (t--)
solve();
return 0;
}
浙公网安备 33010602011771号