2019 牛客多校第一场 E ABBA】的更多相关文章

链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Bobo has a string of length 2(n + m) which consists of characters A and B. The string also has a fascinating prop…
题意:问有多少个有(n + m)个A和(n + m)个B的字符串可以凑出n个AB和m个BA. 思路:首先贪心的发现,如果从前往后扫,遇到了一个A,优先把它看成AB的A,B同理.这个贪心策略用邻项交换很好证明.之后,我们设dp[i][j]为填了i个A和j个B的字符串不违法的方案数.什么叫不违法呢?有一些方案是一定不可以凑出n个AB和m个BA的,比如如果i - n > j了就不行:现在已经有i个A,其中有n个A用来充当AB的A,那么剩下的A只能去充当BA的A,但是假如现在你的B的个数j小于的BA的A…
题目链接:https://ac.nowcoder.com/acm/contest/881/E 题目大意 问有多少个由 (n + m) 个 ‘A’ 和 (n + m) 个 ‘B’,组成的字符串能被分割成 (n + m) 个长度为 2 的子序列,其中恰好有 n 个 “AB”,和 m 个 “BA”. 分析1(DP) 首先,如果一个串是合法的,那么我们可以用贪心的思路找到一种必然正确的划分子序列的方法:前 n 个 A 分配给 AB,后 m 个 A 分配给 BA,B 同理. 设 dp[i][j] 表示有…
ABBA dp 题意 给出2(N+M)个AB字符,问能构造出N个AB子序列和M个BA子序列组成的2*(n+m)的序列种类有多少 思路 碰到计数构造类的题目,首先要去找到判断合法性的条件,即什么情况下合法,什么情况下非法,剩下的工作无非就是实现问题,要么排列组合,要么DP,要么一起用.本题中,还要考虑构造中的贪心问题,也就是给你一堆AB,你怎么构造?很容易想到肯定是前面的A和最后几个B构造出AB,剩下的B和剩下的A构造出BA,也就是前面几个A是用来构造AB的,前面几个B是用来构造BA的,那么我们就…
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有两个属性a,b 需要将点划分为两堆,划分依据是对于在A划分中的任意点a和在B划分中的任意点b满足 不存在当a.x>b.x时,a.y<b.y 的情况 在A划分中的点可以给出其a属性的贡献,在B划分中的点可以给出其b属性的贡献 求最大贡献和 题解: 根据题意,我们可以得出结论,我们需要找的是一根折线,…
Equivalent Prefixes 传送门 解题思路 先用单调栈求出两个序列中每一个数左边第一个小于自己的数的下标, 存入a[], b[].然后按照1~n的顺序循环,比较 a[i]和b[i]是否相等,如果不相等则退出循环,此时最后一个相等的就是答案. 假设前1 ~ n-1已经满足了条件,此时判断1 ~ n是否可行,就是判断l~n是否都成立,如果a[n] < b[n], 那么当l=b[n]时,序列1的RMQ为b[n],序列2的为n,明显不成立,a[n] > b[n]同理.当a[n]等于b[n…
题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤m where RMQ(w,l,r) denotes the index of the minimum element among wl,wl+1,-,wr. Since the array contains distinct el…
题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文延用! 题目大意 给定一个 n * m 的二维矩阵和 k,定义$count(x) = \sum\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} [v_{i, j} \& x 所表示的二进制位有奇数个一] $,求如下式子: $$\begin{align*}\big…
ABBA 题目传送门 解题思路 用dp[i][j]来表示前i+j个字符中,有i个A和j个B的合法情况个数.我们可以让前n个A作为AB的A,因为如果我们用后面的A作为AB的A,我们一定也可以让前面的A对应那个B,同理,我们可以让前m个B作为BA的B. 接下来讨论转移方程.当i<=n时,这个A作为AB的A必然可以放进来,当i>n时,此时若放入A,则这个A是第i-n个BA的A,所以只有当i<=n+min(j,m)时才可以放入.同理,只有当j<=m或者j<=m+min(i,n)时才可…
题意: 给你一个集合A,里边有n个正整数,对于所有A的.满足集合内元素异或和为0的子集S,问你∑|S| n<=1e5,元素<=1e18 首先可以转化问题,不求∑|S|,而是求每个元素属于子集数的和,也就是统计每个元素对答案的贡献 (题解中说根据期望的线性?我不懂期望和这个有啥关系,但是并不影响理解) 既然要求集合中的异或和,线性基就是针对这一类问题的一把好手 先给A求一个基R 对于没有被扔进R的元素,每一个元素对答案的贡献都是2^(n-|R|-1) 因为对于每个元素,先把它选走,剩下的不在R中…