AGC030F - Permutation and Minimum】的更多相关文章

https://atcoder.jp/contests/agc030/tasks/agc030_f 题解 我们先把这个排列从\(1 \sim 2n\)表达出来,然后题面中的每一对数我们可以用一条线把他们连起来,那么在序列中表达出的值是这条线的左端点. 如果一开始每个数都没有限制的话,我们则需要求有哪些数会成为左端点,这个其实就是卡特兰数,求答案的话还需要求一个阶乘. 现在有一些位置有了限制,我们就把有限制的位置成为特殊位置. 还是从\(1\sim 2n\)这个序列上考虑,因为我们的贡献是在左端点…
[agc030f]Permutation and Minimum(动态规划) 题面 atcoder 给定一个长度为\(2n\)的残缺的排列\(A\),定义\(b_i=min\{A_{2i-1},A_{2i}\}\),求有多少种不同的\(b\). 题解 考虑这个\(b\)的取值是两两配对之后求\(min\),所以我们把所有的数按照从大往小处理,这样子就可以在每一对数填好的时候计算贡献. 首先把已经确定的\(b\)直接丢掉.这样子剩下了若干个填了一半和没有填的对. 设\(f[i][j][k]\)表示…
题目大意 有一个长度为序列 \(a\),其中某些位置的值是 \(-1\). 你要把 \(a\) 补成一个排列. 定义 \(b_i=\min(a_{2i-1},a_{2i})\),求有多少种可能的 \(b\). \(n\leq 300\) 题解 如果 \(a_{2i-1}\) 和 \(a_{2i}\) 都有值,就把这两个位置扔掉. 记 \(c_i\) 表示 \(i\) 这个值是否在初始的 \(a\) 中. 从后往前DP.记 \(f_{i,j,k}\) 表示已经处理完了 \(i\) 后面的数,有多少…
题目链接 题解 首先可以想到分组后,去掉两边都填了数的组. 然后就会剩下\((-1,-1)\)和\((-1,x)\)或\((x,-1)\)这两种情况 因为是最小值序列的情况数,我们可以考虑从大到小填数,一个组填完了最小值就是当前填的数 设\(f[i][j][k]\)表示已经填到数\(i\)剩余\(j+k\)个填了一个数的组,其中有\(j\)个组是第一种情况填出来的,\(k\)个是第二种情况来的 分情况转移 如果这个数属于第一种情况,那么可以转移到: \(f[i][j+1][k]:\)填到一个\(…
原文链接www.cnblogs.com/zhouzhendong/p/AGC030F.html 草率题解 对于每两个相邻位置,把他们拿出来. 如果这两个相邻位置都有确定的值,那么不管他. 然后把所有的这些数拿出来,分为两类,一类是没有被填入的,一类是被填入的. 然后大力DP即可.由于没有被填入的可以任意排列,所以最后还要乘上一个阶乘. 代码 #include <bits/stdc++.h> #define clr(x) memset(x,0,sizeof x) #define For(i,a,…
洛谷题面传送门 & Atcoder 题面传送门 12 天以前做的题了,到现在才补/yun 做了一晚上+一早上终于 AC 了,写篇题解纪念一下 首先考虑如果全是 \(-1\)​ 怎么处理.由于我们不关心每个 pair 中的 max 是多少,并且显然每个 pair 的最小值都是两两不同的,因此我们可以考虑有多少个最小值组成的集合,然后答案乘上 \(n!\) 即可.而显然如果我们将"作为某个 pair 的最小值"的位置放上一个左括号,"不作为某个 pair 的最小值&quo…
第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之后,接下来每次的方向都和前一次相反 因为转向后再往相同方向走一定不如初始就往该方向走然后转两次向 枚举初始往哪个方向走以及走几步,前缀和优化即可 #include<ctime> #include<cmath> #include<cstdio> #include<cst…
A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继续吃. 题解 输出\(\text{min(A + B + 1, C) + B}\)即可. 代码 #include <bits/stdc++.h> using namespace std; int main() { int a, b, c; cin >> a >> b >…
A - Poisonous Cookies 有毒还吃,有毒吧 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 100005 #define e…
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n). For example,S = "ADOBECODEBANC"T = "ABC" Minimum window is "BANC". Note:If there is no such window i…