原题链接

简要题意:

给定一个 \(1\) ~ \(n\) 的置换,将数组分为 \(k\) 个区间,使得每个区间的最大值之和最大。求这个值,和分区的方案数。

关键在于 \(1\) ~ \(n\) 的置换。

显然,你只要把从 \(n - k + 1\) 到 \(n\) 这一段,每个区间分一个(其余的随便分)。

显然可以得出第一个答案:

\[(n-k+1) + (n-k+1) + \cdots + (n-1) + n
\]

(很显然,你可以用等差数列求和,可是没这个必要,一会儿求第二个答案的时候,可以顺便求啊

比方说:(以第三个样例为例)

7 3
2 7 3 1 5 4 6

这时你把 \(5\),\(6\),\(7\) 作为每个区间的最大值。

此时你会发现,比方说 \(3 \space 1\) 这一段。

它要么全归 \(7\),全归 \(5\) ,或者分两段,左边归 \(7\),右边归 \(5\).

那么,你想,这就相当于你可以在任意的位置把它分段。(包括最左边和最右边,此时尽属一段)

那么,方案数是 \(3\).

就是 \(5\) 的位置减去 \(7\) 的位置,即 \(5 - 2 = 3\).

而一共三段,分别计算。根据 乘法原理 可得:

\[1 \times 3 \times 2 = 6
\]

所以,第二个答案是:

每个 \(\geq n - k + 1\) 的数和前面一个 \(\geq n - k + 1\) 的数的位置之差的乘积。

第零个 \(\geq n - k + 1\) 的数的位置,我们认为是 \(0\).

记得开 \(\texttt{long long}\).

十年OI一场空,不开long long见祖宗

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll MOD=998244353; inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;} int n,k,last;
ll s=0,cnt=1; int main(){
n=read(),k=read();
for(int i=1,t;i<=n;i++) {
t=read(); if(t>n-k) {
s+=t; if(!last) last=i; //维护上一个 >= n - k + 1 的数的位置
else cnt=cnt*(i-last)%MOD,last=i; //计数
}
} printf("%lld %lld\n",s,cnt);
return 0;
}

CF1326C Permutation Partitions 题解,的更多相关文章

  1. Codeforces Global Round 7 C. Permutation Partitions(组合数学)

    题意: 给你 n 长全排列的一种情况,将其分为 k 份,取每份中的最大值相加,输出和的最大值和有多少种分法等于最大值. 思路: 取前 k 大值,储存下标,每两个 k 大值间有 vi+1 - vi 种分 ...

  2. CF1490D Permutation Transformation 题解

    Content 给定一个排列 \(a\),按照以下方法构造一棵树: 选择当前排列中的最大数作为根的编号. 最大数左边的所有数按照上述方法建左子树,若没有数则该节点没有左儿子. 最大数右边的所有数按照上 ...

  3. Codeforces Global Round 7

    A. Bad Ugly Numbers 思路 题意: 给我们一个k,让我们用 0-9 之间的数字构成一个 k位数a,a不能被组成a的每一位数字整除. 分析:首先 k等于1,无论我们怎么配都会被整除:当 ...

  4. CF #640 (div4)

    CF640 div4 草 迟到半个月的补题 真正的懒狗 再懒就无了 D. Alice, Bob and Candies 题意:n个数字,奇数时间从左侧删数字,偶数时间从右侧删数字,每次删的数字之和必须 ...

  5. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  6. [LeetCode 题解]: Permutation Sequcence

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  7. 【题解】Codeforces 961G Partitions

    [题解]Codeforces 961G Partitions cf961G 好题啊哭了,但是如果没有不小心看了一下pdf后面一页的提示根本想不到 题意 已知\(U=\{w_i\}\),求: \[ \s ...

  8. 【题解】CF359B Permutation

    [题解]CF359B Permutation 求一个长度为\(2n\)的序列,满足\(\Sigma |a_{2i}-a_{2i-1}|-|\Sigma a_{2i}-a_{2i-1}|=2k\) 这种 ...

  9. [LeetCode]题解(python):031-Next Permutation

    题目来源 https://leetcode.com/problems/next-permutation/ Implement next permutation, which rearranges nu ...

随机推荐

  1. Django+Celery框架自动化定时任务开发

    本章介绍使用DjCelery即Django+Celery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本.业务场景接口自动化测试脚本.App自动化测试脚本.Web自动化 ...

  2. Jmeter连接mysql成功

    1 下载,mysql-connector-odbc-5.3.4-winx64.msi 进行安装  <转载> 2 安装后, copy "C:\ProgramFiles (x86)\ ...

  3. Solr查询配置及优化【eDisMax查询解析器】

    一.简介 Lucene查询解析器语法支持创建任意复杂的布尔查询,但还有一些缺点,它不是用户查询处理的理想解决方案.这里面最大的问题是Lucene查询解析器的语法要求严格,一旦破坏就会抛出异常.指望用户 ...

  4. git指令-删除

    git指令-删除 添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test.txt" [maste ...

  5. webstorm 提示 "scanning files to index..." 一直不能编译的问题

    先说一下我的操作过程吧: 下载公司的vue项目后,要用到webpack打包工具,需要按照package.json安装一些依赖,我使用了镜像后,npm install模块时候生成了一个 node_mod ...

  6. Pytorch-Tensor基本操作

    (此文为个人学习pytorch时的笔记,便于之后的查询) Tensor基本操作 创建tensor: ​ 1.numpy向量转tensor: a=np.array([2,2,2]) b=torch.fr ...

  7. python框架Django实战商城项目之用户模块创建

    创建用户APP 整个项目会存在多个应用,需要存放在一个单独的文件包了,所以新建一个apps目录,管理所有子应用. 在apps包目录下穿件users应用 python ../../manage.py s ...

  8. Java 8 Optional 良心指南,建议收藏

    想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案.作为一名 Java 程序员,我真的是烦透了 Null ...

  9. 在centos7使用docker下搭建elasticsearch集群

    一 .docker的安装 https://www.cnblogs.com/ghostdot/p/12410242.html 二.创建相关映射文件 cd /home/ mkdir node cd nod ...

  10. disruptor 核心概念 二

    一.Disruptor图解 二.disruptor核心概念 1.RingBuffer到底是啥?正如名字所说的一样,他是一个环(首尾相接的环)它用做在不同上下文(线程)间传递数据的buffer Ring ...