首页 > 其他分享 >Codeforces Round #829 (Div. 2) E Wish I Knew How to Sort

Codeforces Round #829 (Div. 2) E Wish I Knew How to Sort

时间:2022-10-24 11:47:11浏览次数:80  
标签:Sort int Wish ll Knew ans dp mod

Wish I Knew How to Sort

概率dp

设计一个 \(dp[i]\) 表示还需要进行 \(i\) 次有效移动的概率

何为有效移动?最后的数组是 \(0\) 在左边,\(1\) 在右边

因此只有把两个在错误位置的交换,才算一次有效移动

因此计算出处于左边(本应该是 \(0\) 的位置)的 \(1\),然后就知道当前需要多少次有效移动,显然 \(dp[0] = 0\)

有状态转移:

\(dp[i] = \frac{i*i}{n*(n-1)/2}dp[i-1] + (1- \frac{i*i}{n*(n-1)/2})dp[i] + 1\)

移项一下:

\(dp[i] = \frac{n*(n-1)/2}{i*i}dp[i-1]\)

#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
const ll mod = 998244353;

ll qpow(ll x, ll n)
{
    ll ans = 1;
    while(n)
    {
        if(n & 1) ans = x * ans % mod;
        n >>= 1;
        x = x * x % mod;
    }
    return ans % mod;
}

ll inv(ll x)
{
    return qpow(x, mod - 2);
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        vector<int>a(n);
        for(int i=0; i<n; i++) cin >> a[i];
        int a0 = 0, a1 = 0;
        for(int i=0; i<n; i++) a0 += a[i] == 0;
        for(int i=0; i<a0; i++) a1 += a[i] == 1;
        ll ans = 0;
        for(int i=1; i<=a1; i++) ans = (ans + inv(i) * inv(i) % mod) % mod;
        ans = ans * (n - 1) % mod * n % mod * inv(2) % mod;
        cout << ans << "\n";
    }
    return 0;
}

标签:Sort,int,Wish,ll,Knew,ans,dp,mod
From: https://www.cnblogs.com/dgsvygd/p/16820971.html

相关文章

  • PHP array_multisort 多维数组排序的理解
    array_multisort(array1,sortingorder,sortingtype,array2,array3...) 1.数组从前往后,依次排序;前一组数中值相同时,才考虑后一个数组中的值排序;2.任一数组排序变......
  • Shell细说sort排序
    sort是在Linux里非常常用的一个命令,管排序sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。使用方法:so......
  • List.sort 排序方法使用
     在数据库中取出的List<Map<Strng,Object>>现在根据Map里面的时间字段进行排序代码:list.sort(newComparator<Map<String,Object>>(){@Overridepublicin......
  • 「题解」Codeforces 1730F Almost Sorted
    给定一个长度为\(n\)的置换\(p\),以及一个正整数\(k\).对于一个置换\(q\),要求对于所有满足\(1\leqi<j\leqn\)的\(i,j\),有以下不等式成立:\[p_{q_i}\leqp_{q_j}+......
  • Js sort return 1 return -1 return 0 都会干啥
    let  arr=[2,3,4,5,6,7,8,0];arr.sort((a,b)=>{returna-b;});  //返回负数就会调换位置,2-3=-1<0  2和3变位置,就是 3,2,。。。  这个是降序arr.sort((a......
  • filesort单双路排序
    单路排序:一下子取出满足条件的所有字段,然后在sortbuffer中进行排序双路排序:又成回表排序,就是当sortbuffer不够用的时候。就是先将需要排序的相应字段与id加载到sortb......
  • ClickHouse 使用Primary Key原因以及为什么与 Sorting Key 不同
    官方地址首先选择主键原因SelectingthePrimaryKey​Thenumberofcolumnsintheprimarykeyisnotexplicitlylimited.Dependingonthedatastructure,you......
  • 可排序的数据结构,可以使用SortedList<TKey,TValue>
    C#实现一个万物皆可排序的队列 需求产品中需要向不同的客户推送数据,原来的实现是每条数据产生后就立即向客户推送数据,走的的是HTTP协议。因为每条数据都比较小,而数据......
  • LeetCode 167. Two Sum II - Input array is sorted(双指针)
    ​​题目​​题意:找出数组里两个数字之和为指定数字的两个下标。题解:双指针classSolution{public:vector<int>twoSum(vector<int>&numbers,inttarget){......
  • LeetCode 88 Merge Sorted Array
    ​​题目​​classSolution{public:voidmerge(vector<int>&nums1,intm,vector<int>&nums2,intn){vector<int>nums3;intk......