51nod 1514 美妙的序列】的更多相关文章

Description 长度为n的排列,且满足从中间任意位置划分为两个非空数列后,左边的最大值>右边的最小值.问这样的排列有多少个%998244353 题面 Solution 正难则反 \(f[n]=n!-\)不满足条件的排列 不满足条件的排列一定是这样的: 存在一个断点 \(L\),使得 \([1,L]\) 中的数的值域也为 \([1,L]\),\([L+1,n]\) 的值域为 \([L+1,n]\) 但是一个不合法的排列,可能存在很多个断点 \(L\) 满足上述条件,会算重很多次,所以我们要…
Code: #include<bits/stdc++.h> #define ll long long #define mod 998244353 #define maxn 400000 #define N 100005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; ll qpow(ll base,ll k) { ll tmp=1; while(k) { if(k&1…
题意:1~n 的全排列中,有多少个排列满足任意从中间切成两段后,左边段的最大值大于右边段的最小值? 例如:n为3时有3种 2 3 1 3 1 2 3 2 1 解释:比如 2 3 1 (2) (3 1) 1比2小 (2 3) (1) 1比2小 都满足上面的条件. 3 2 1 (3)(2 1) 1比3小 (32)(1)  1比3小 都满足上面的条件. 而2 1 3不满足,因为(2 1)(3),3比左边所有的数都大. ====================================分割线===…
\(\mathcal{Description}\)   Link.   称排列 \(\{p_n\}\) 美妙,当且仅当 \((\forall i\in[1,n))(\max_{j\in[1,i]}\{p_i\}>\min_{j\in(i,n]}\{p_j\})\).求长度为 \(n\) 的美妙排列个数.多测.   \(n\le10^5\). \(\mathcal{Solution}\)   讨论这道题的时候--打表,然后发现了 A003319!/xyx   显然 \(f(0)=0,f(1)=1\…
Description 如果对于一个 \(1\sim n\) 的排列满足: 在 \(1\sim n-1\) 这些位置之后将序列断开,使得总可以从右边找一个数,使得该数不会比左边所有数都大,则称该序列是"美妙的". 给出 \(n\) ,求出长度为 \(n\) 的美妙的序列的数量.多组数据. \(T,n\leq 10^5\).对 \(998244353\) 取模. Solution 暴力DP是 \(O(Tn^2)\) 的.我们需要发现题目的隐藏性质. 如果某个排列不是美妙的,那一定存在一个…
题目 我们发现我们得正难则反 还是设\(f_i\)表示长度为\(i\)的序列个数 考虑容斥 \[f_i=i!-\sum_{j=1}^{i-1}f_j(i-j)!\] \(i!\)显然是总方案数,我们减掉不合法的方案数,显然\(1\)到\(j\)这些数强行合法,之后\(j+1\)到\(i\)在后面自由排列,由于在\(j\)后面这个位置没有一个数比之前的小,所以一定不合法,同时通过首次不合法的位置区分开不同的序列,从而做到不重不漏 但是上面有一个小问题就是\(f_0=0\),但是按照上面的递推数列来…
题目描述 现在有一个长度为n的数组A,另外还有一个整数k.数组下标从1开始. 现在你需要把数组的顺序重新排列一下使得下面这个的式子的值尽可能小. ∑|A[i]−A[i+k]| 特别的,你也可以不对数组进行重新排列. Input 单组测试数据. 第一行包含两个整数n,k (2≤n≤3*10^5, 1≤k≤min(5000,n-1)). 第二行包含n个整数 A[1],A[2],...,A[n] (-10^9≤A[i]≤10^9). Output 输出答案占一行. Input示例 3 2 1 2 4…
题解 容斥题 我们枚举出现次数最多的数出现了K次 然后我们需要计算的序列是所有数字出现个数都不超过K - 1次 我们枚举不合法的数字的数目j,说明这个排列里除了我们固定出现K次的数至少有j个数是不合法的,先让这j个数每个数出现k次,然后再随意排列 j最大是N / K 那么复杂度就是调和级数了 代码 #include <bits/stdc++.h> //#define ivorysi #define enter putchar('\n') #define space putchar(' ') #…
为什么网上没有篇详细的题解[雾 可能各位聚聚觉得这道题太简单了吧 /kk 题意 首先题目是求满足条件的序列个数,条件为:出现次数最多的数仅有一个 分析 感谢 刚睡醒的 JZ姐姐在咱写题解忽然陷入自闭的时候为咱知道迷津 QwQ 那么套路来说第一想到的其实就是容斥辣 然后懒得想去网上黈力[雾 在然后,发现网上要么没推导公式(虽说是直接列不用化简的)要么就是推导公式是错的... 于是坐下来冷静分析:首先,我们考虑最高的出现次数为 x 的情况下,有多少个序列是满足条件的 容斥一发发现式子长这个样子(用到…
很恶心啊,一道水题改了半天,主要是各种细节没有注意到,包括左括号剩余时有可能会出错的情况,需要从后往前扫 贡献一组测试数据: ((()))())(())(( 答案:8 1 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1E6 + 3; char s[N]; int main() { scanf("%s", s); in…