I will no longer b|

yabnto

园龄:2年8个月粉丝:14关注:17

I - Wish I Knew How to Sort

I - Wish I Knew How to Sort

题意

每次随机选择下标 i,j 交换 a[i],a[j],求变成不降序列的期望次数。

思路

dp,同样也是期望 dp,先考虑暴力,可以状态压缩,那么 010 可以转移到:

100010001
这三种,然后我们发现,其实只有 001 有点用,而其他的就有点鸡肋,所以可以观察前两个串,会发现它们与目标串不同的地方有两个,所以它们与目标串的“距离”为 1,而第三个串的“距离”则为 0,那么就可以用这个“距离”作为代表这一类的标志、下标,我们发现这个“距离”最多也只有 n2 所以可以用这个来做 dp,所以可以推出:dpi=1+i2n(n1)2dpi1+n(n1)2i2n(n1)2dpi,这个时候我们发现式子里出现了类似 x=x 的东东,所以移项:
dpi=1+i2n(n1)2dpi1+n(n1)2i2n(n1)2dpi
dpin(n1)2i2n(n1)2dpi=1+i2n(n1)2dpi1
(1n(n1)2i2n(n1)2)dpi=1+i2n(n1)2dpi1
dpi=1+i2n(n1)2dpi1(1n(n1)2i2n(n1)2)
这个时候式子就没问题了,直接 dp 算即可
注:
距离:这里设距离为最少需要几次交换才能变成目标串

code

点击查看代码
#include <iostream>
#include <iomanip>
using namespace std;
using ll = long long;
const int MaxN = 200010, mod = 998244353;
ll a[MaxN], t, n, cnt, sum;
ll dp[MaxN];
ll qpow(ll a, ll b) {
ll res = 1;
for (ll i = 1; i <= b; i <<= 1) {
(b & i) && (res = res * a % mod);
a = a * a % mod;
}
return res;
}
int main() {
for (cin >> t; t; t--) {
cin >> n, cnt = sum = 0;
for (ll i = 1; i <= n; i++) {
cin >> a[i], sum += a[i] == 0;
}
for (ll i = 1; i <= n; i++) {
if (i <= sum) {
cnt += a[i] != 0;
} else if (i > sum) {
cnt += a[i] != 1;
}
}
cnt /= 2;
for (ll i = 1; i <= cnt; i++) {
ll a = n * (n - 1) % mod * qpow(2, mod - 2) % mod;
dp[i] = ((1 + dp[i - 1] * (i * i % mod * qpow(a, mod - 2) % mod) % mod) * qpow(((1 - ((a - i * i % mod) + mod) % mod * qpow(a, mod - 2) % mod) % mod + mod) % mod, mod - 2) % mod + mod) % mod;
}
cout << (dp[cnt] % mod + mod) % mod << endl;
}
return 0;
}

本文作者:yabnto

本文链接:https://www.cnblogs.com/ybtarr/p/17600449.html

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

posted @   yabnto  阅读(27)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 光辉岁月 Audio artist
  3. 3 名前を呼ぶよ Audio artist
  4. 4 战歌 Audio artist
  5. 5 時を越えた想い Audio artist
  6. 6 所念皆星河 Audio artist
  7. 7 See you again Audio artist
時を越えた想い - Audio artist
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起