Codeforces Round #804 (Div. 2) C(组合 + mex)

本萌新的第一篇题解qwq

题目链接:

传送门QAQ

题意:

给定一个\(\left [0,n-1 \right ]\)的排列,问有多少个排列,所有的子区间的mex值和原排列的mex值相同,求方案数对1e9 + 7 取模。

分析:

对于这个问题,我们要先知道,一个区间的mex是该区间没有出现过的最小正整数。所以对于\(\left [0,n-1 \right ]\)中的每个数字\(i\),我们要知道的是\(\left [0,i-1 \right ]\)数字出现的位置情况,通过模拟样例,我们是可以发现,\(\left [0,i-1 \right ]\)区间中数字的左边的最右和右边的最左这块区域内,\(i\)是可以任意放置的,所以答案就可以更新为:

\[ans = ans * (r - l + 1 - i) % mod
\]

解释一下这里的公式的含义,\((r- l + 1)\) 是待定区间长度,因为\([0,i-1]\)个数被占掉了,所以要减去\(i\)个。

代码:

void solve(){
int n;
cin >> n;
vector<int> a(n);
vector<int> pos(n); // 记录数字出现的位置
for (int i = 0;i < n;i ++) {
cin >> a[i];
pos[a[i]] = i;
}
int ans = 1;
int l = Inf, r = -Inf;
for (int i = 0;i < n; i++) {
if(pos[i] >= l && pos[i] <= r) {
ans = ans * (r - l + 1 - i) % mod;
}
l = min(l,pos[i]);
r = max(r,pos[i]);
}
cout << ans << endl;
}

第一次发博客和题解,主要目的是为了记录学习过程啦,也希望各位dalao能给本蒟蒻一点建议

Codeforces Round #804 (Div. 2) C(组合 + mex)的更多相关文章

  1. Codeforces Round #804 (Div. 2)

    题目链接 A  The Third Three Number Problem 题意 给你一个n,让你求满足的a,b,c. 如果不存在则输出-1. 思路 显然任意a,b,c是不可能得到奇数. 只考虑偶数 ...

  2. Codeforces Round #670 (Div. 2) A. Subset Mex (贪心)

    题意:给你一长度为\(n\)的序列,将其分为两个集合,求两个集合中未出现的最小元素的最大值, 题解:用桶存一下每个元素的个数,两次枚举\([1,100]\),找出两个最小值即可. 代码: int t; ...

  3. 组合数学题 Codeforces Round #108 (Div. 2) C. Pocket Book

    题目传送门 /* 题意:每一次任选i,j行字符串进行任意长度前缀交换,然后不断重复这个过程,问在过程中,第一行字符串不同的个数 组合数学题:每一列不同的字母都有可能到第一行,所以每列的可能值相乘取模就 ...

  4. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  5. Codeforces Round #257 (Div. 1)A~C(DIV.2-C~E)题解

    今天老师(orz sansirowaltz)让我们做了很久之前的一场Codeforces Round #257 (Div. 1),这里给出A~C的题解,对应DIV2的C~E. A.Jzzhu and ...

  6. CF922 CodeForces Round #461(Div.2)

    CF922 CodeForces Round #461(Div.2) 这场比赛很晚呀 果断滚去睡了 现在来做一下 A CF922 A 翻译: 一开始有一个初始版本的玩具 每次有两种操作: 放一个初始版 ...

  7. Codeforces Round #469 (Div. 2)

    Codeforces Round #469 (Div. 2) 难得的下午场,又掉分了.... Problem A: 怎么暴力怎么写. #include<bits/stdc++.h> #de ...

  8. Codeforces Round #435 (Div. 2)【A、B、C、D】

    //在我对着D题发呆的时候,柴神秒掉了D题并说:这个D感觉比C题简单呀!,,我:[哭.jpg](逃 Codeforces Round #435 (Div. 2) codeforces 862 A. M ...

  9. Codeforces Round #499 (Div. 1)部分题解(B,C,D)

    Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ...

随机推荐

  1. HTML js 复习

    <a href="#top" target="_self">返回顶部</a> 返回页面顶部代码 打印js对象方法 function wr ...

  2. Yii项目知识搜集

    [['rId','advertiser_id','image_file'], 'unique','targetAttribute'=>['rId','advertiser_id','image_ ...

  3. javascript引用奇趣

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. 6.8 NOI 模拟

    \(T1\ edge\) 考虑\(O(q\times n\times \log n)\)的暴力 暴力二分,直接树上差分 #define Eternal_Battle ZXK #include<b ...

  5. Python基础之dict和set的使用

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言种也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  6. 什么?WPF 不支持 SVG ?

    什么?WPF 不支持 SVG ? 控件名:SharpVectors 作者:Elinam LLC (Japan) 项目地址: https://github.com/ElinamLLC/SharpVect ...

  7. ASP.NET Core 6框架揭秘实例演示[34]:缓存整个响应内容

    我们利用ASP.NET开发的大部分API都是为了对外提供资源,对于不易变化的资源内容,针对某个维度对其实施缓存可以很好地提供应用的性能.<内存缓存与分布式缓存的使用>介绍的两种缓存框架(本 ...

  8. Swagger以及knife4j的基本使用

    Swagger以及knife4j基本使用 目录 Swagger以及knife4j基本使用 Swagger 介绍: Restful 面向资源 SpringBoot使用swagger Knife4j -- ...

  9. docker可视化

    可视化第一种方式 Portainer(不是最佳选择但先用这个) docker run -d -p 8088:9000 \ #docker run 启动:通过内网9000端口,外网8088端口:rest ...

  10. KingbaseESV8R6不同隔离级下xmin的区别

    背景 sys_stat_activity视图中用两个字段表示: backend_xid表示事务开始需要申请的事务id backend_xmin表示一个事务快照,表示当前数据库中最小的正在运行的事务号, ...