CF1326C Permutation Partitions 题解,
简要题意:
给定一个 \(1\) ~ \(n\) 的置换,将数组分为 \(k\) 个区间,使得每个区间的最大值之和最大。求这个值,和分区的方案数。
关键在于 \(1\) ~ \(n\) 的置换。
显然,你只要把从 \(n - k + 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\).
而一共三段,分别计算。根据 乘法原理 可得:
\]
所以,第二个答案是:
每个 \(\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 题解,的更多相关文章
- Codeforces Global Round 7 C. Permutation Partitions(组合数学)
题意: 给你 n 长全排列的一种情况,将其分为 k 份,取每份中的最大值相加,输出和的最大值和有多少种分法等于最大值. 思路: 取前 k 大值,储存下标,每两个 k 大值间有 vi+1 - vi 种分 ...
- CF1490D Permutation Transformation 题解
Content 给定一个排列 \(a\),按照以下方法构造一棵树: 选择当前排列中的最大数作为根的编号. 最大数左边的所有数按照上述方法建左子树,若没有数则该节点没有左儿子. 最大数右边的所有数按照上 ...
- Codeforces Global Round 7
A. Bad Ugly Numbers 思路 题意: 给我们一个k,让我们用 0-9 之间的数字构成一个 k位数a,a不能被组成a的每一位数字整除. 分析:首先 k等于1,无论我们怎么配都会被整除:当 ...
- CF #640 (div4)
CF640 div4 草 迟到半个月的补题 真正的懒狗 再懒就无了 D. Alice, Bob and Candies 题意:n个数字,奇数时间从左侧删数字,偶数时间从右侧删数字,每次删的数字之和必须 ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [LeetCode 题解]: Permutation Sequcence
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- 【题解】Codeforces 961G Partitions
[题解]Codeforces 961G Partitions cf961G 好题啊哭了,但是如果没有不小心看了一下pdf后面一页的提示根本想不到 题意 已知\(U=\{w_i\}\),求: \[ \s ...
- 【题解】CF359B Permutation
[题解]CF359B Permutation 求一个长度为\(2n\)的序列,满足\(\Sigma |a_{2i}-a_{2i-1}|-|\Sigma a_{2i}-a_{2i-1}|=2k\) 这种 ...
- [LeetCode]题解(python):031-Next Permutation
题目来源 https://leetcode.com/problems/next-permutation/ Implement next permutation, which rearranges nu ...
随机推荐
- 《和莎莫的 500 天》中为什么 Summer 最终没有和 Tom 在一起?
好的电影总是需要仔细赏味几次,每次也都会有不同的收获.就像我钟爱的[500 days of summer]. 彪悍的大胡子导演MarcWebb实在是太有趣,把自己的亲身经历搬上大荧幕,因为" ...
- 这有一管信息量很大的DNA
题图:华盛顿大学副教授Luis Henrique Ceze(照片中的男士)和研究科学家Lee Organick正将数字数据保存进DNA测序,以供"读取"并追溯原始文件. 来自微软和 ...
- PyCharm+git+码云实现project版本控制
1.安装git https://git-scm.com/downloads 2.PyCharm中配置 3.申请码云 4.PyCharm中安装码云插件 右键选择,重启Pycharm. 重新打开PyCha ...
- RocketMQ - 基础知识
RocketMQ简介 RocketMQ是阿里开源的消息中间件,它是纯java开发,具有低延迟.高吞吐量.高可用性和适合大规模分布式系统应用的特点.从名字可以看出Rocket火箭,代表RocketMQ主 ...
- Spring 事务传播机制和数据库的事务隔离级别
Propagation(事务传播属性) 类别 传播类型 说明 支持当前事务 REQUIRED 如果当前没有事务,就新建一个事务.@Transaction的默认选择 支持当前事务 SUPPORTS 就以 ...
- 初识 jquery.simulate.js 模拟键盘事件
用jquery 和 jquery.simulate.js 实现模拟键盘事件,点击上下左右div相当于点击键盘的上下左右键 <!DOCTYPE html> <html> < ...
- 使用MySQL练习增删改查时因为版本问题出现连接错误
使用MySQL练习增删改查时出现连接错误,错误提示如下: 2020-02-19 19:53:51.088 ERROR 16328 --- [reate-249798694] com.alibaba.d ...
- 移动端1px的适配问题
先看个概念: window.devicePixelRatio = 物理像素 / dips(独立像素) window.devicePixelRatio是设备的物理像素和独立像素的比例,可以叫设备像素比. ...
- GPS授时器简介
GPS授时器简介 GPS是全球定位系统的简称.GPS定位卫星在全球范围内进行定位.导航的系统.GPS所具有的全天候.高精度和自动测量的特点,已经融入到国民经济建设.国防建设和社会发展的各个领域.而在授 ...
- markdown简明语法1
目录 Cmd Markdown 简明语法手册 1. 斜体和粗体 2. 分级标题 3. 外链接 4. 无序列表 5. 有序列表 6. 文字引用 7. 行内代码块 8. 代码块 9. 插入图像 Cmd M ...