首页 > 其他分享 >Codeforces Round #804 (Div. 2) C(组合 + mex)

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

时间:2022-10-05 14:45:58浏览次数:73  
标签:right int Codeforces Round pos Div mex left

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能给本蒟蒻一点建议

标签:right,int,Codeforces,Round,pos,Div,mex,left
From: https://www.cnblogs.com/zwh-zzz/p/16755547.html

相关文章

  • Codeforces Round #824 (Div. 2)
    题目链接A~D懒得写。不是因为题不好,其实我觉得做起来非常舒适。但就是懒得写了(E-HousePlanning\(d_1,d_2\)全打乱感觉很难。先看看不打乱怎么做。对于每个\(i......
  • Codeforces Round #774 (Div. 2) - E. Power Board
    枚举+数论Problem-E-Codeforces题意有一个\(n*m\;(1<=n,m<=10^6)\)的矩阵,第i行第j列是\(i^j\),求这个矩阵中的\(n*m\)的数中有多少种不同的数思路......
  • Codeforces Round #785 (Div. 2) - D. Lost Arithmetic Progression
    GCDProblem-D-Codeforces题意有2个等差数列A,B,它们公有的项组成新的等差数列C;现在给出B的(首项,公差,项数)=(b,q,y),C的(首项,公差,项数)=(c,r,z)求满足条件的A的数量,如......
  • CodeForces 1527E Partition Game
    洛谷传送门CF传送门考虑朴素dp:设\(f_{i,j}\)表示分了\(j\)段且第\(j\)段的末尾是\(i\)的最小花费。有转移:\(f_{i,j}\gets\min\limits_{k=0}^{i-1}f_{k,j-1......
  • Codeforces Educational Codeforces Round 136 C D
    C一开始没有读懂题意,以为是轮流游戏,看别人翻译才发现先手在下一轮会变为反手,导致搞了半天过不了样例。可以知道如果\(n\)这张牌在Alice手中,则Alice先手打出这张牌必胜。......
  • Codeforces Round #824 (Div. 2)
    CodeforcesRound#824(Div.2)A#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#defineendl'\n'usingnamespacestd;intt,n;inlin......
  • Codeforces Round #824赛时情况&赛后总结
    前两天的CF到今天才总结,还是太鸽了呢赛时首先看了题目,由于英语障碍,我还在看A题时,YSC就已经A了(我还是太逊了)。看懂后,发现A是道水题(正常),快速切掉。随后看B,阅读倒没什么障......
  • 洛谷 CF550C Divisibility by Eight(DP/数论)
    遇事不决,小学数学。https://www.luogu.com.cn/problem/CF550C题目大意:给你一个位数不超过100的非负整数N(不含前导0)。你的任务是判断这个数字能否通过去掉其中......
  • Codeforces Global Round 22
    题目链接这场彻底打崩了,只做了A,B,C,可以看出我离退役已经不远力!A.GloryAddictstrash题不写。感觉出得很没意思。B.PrefixSumAddicts用\(s_{n-k+1}\sims_n\)......
  • CodeForces 1455G Forbidden Value
    洛谷传送门CF传送门小清新动态开点线段树优化dp题。首先题目中的if嵌套看起来就很烦,可以考虑建树,外面再套一层大的if0...end,这样就将本题转化成一个树上问题。......