zoukankan      html  css  js  c++  java
  • Codeforces Global Round 7 C. Permutation Partitions(组合数学)

    题意:

    给你 n 长全排列的一种情况,将其分为 k 份,取每份中的最大值相加,输出和的最大值和有多少种分法等于最大值。

    思路:

    取前 k 大值,储存下标,每两个 k 大值间有 vi+1 - vi 种分法,相乘即可。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll mod=998244353;
    int main()
    {
        int n,k;cin>>n>>k;
        int p[n];for(int &i:p) cin>>i;
        ll sum=0;
        vector<int> v;
        for(int i=0;i<n;i++)
            if(p[i]>n-k){
                sum+=p[i];
                v.push_back(i);
            }
        ll ans=1;
        for(int i=0;i<int(v.size())-1;i++)
            ans=ans*(v[i+1]-v[i])%mod;
        cout<<sum<<' '<<ans<<"
    ";
        return 0;
    }
  • 相关阅读:
    c++
    zjoi 力
    poj 3415
    [SDOI2014]旅行
    模板测试
    [WC2006]水管局长
    HDU5730
    [NOI2014]魔法森林
    [NOI2012]骑行川藏(未完成)
    [NOI2012]随机数生成器
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12528965.html
Copyright © 2011-2022 走看看