题解:P12600 连号子序列数
P12600 连号子序列数题解
根据题意,我们要求关于 \(1 \sim N\) 的全排列的连号子序列数量,连号子序列的定义是子序列排序后形成一个连续的递增序列。
思路
通过分析,我们可以发现无论给定 \(1 \sim N\) 某一全排列如何,一定存在全排列为 \(1,2,3\dots N\) 的形式。
所以此时的连号子序列数量变成了非空串子串数量,所以答案为 \(\frac{N \times (N+1) }{2}\)。
注意使用 long long。
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin >> n;
cout << n * (n + 1) / 2;
// 读取输入,但不需要处理
for (int i = 1; i <=n; ++i) {
int x;
cin >> x;
}
return 0;
}
这种方法的时间复杂度为 \(O(N)\),空间复杂度为 \(O(1)\),能够高效处理最大规模为 \(500000\) 的输入。
尝试只输入数字 \(N\) 然后直接输出答案的做法也可以通过本题。

浙公网安备 33010602011771号