题目链接: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…
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属性的贡献 求最大贡献和 题解: 根据题意,我们可以得出结论,我们需要找的是一根折线,…
链接: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…
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…
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中…
题目链接:https://ac.nowcoder.com/acm/contest/881/B 题目大意 给定 n 个不同的正整数 ai,求$\frac{1}{\pi}\int_{0}^{\infty} \frac{1}{\prod\limits_{i=1}^{n}(a_i^2+x^2)}dx$模 109 + 7.(可以证明这个积分一定是有理数) 分析 $$\begin{align*}&令c_i = \frac{1}{\prod_{j \ne i} (a_j^2 - a_i^2)} \\&则…
题意:问有多少个有(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/F 题目大意 给定二维平面上 3 个整数表示的点 A,B,C,在三角形 ABC 内随机选一点 P,求期望$E = max(S_{PAB}, S_{PAC}, S_{PBC})$.输出 36 * E. 分析 先说结论,答案是$22S_{ABC}$,证明如下: 不妨设 A 为 (0, 0),B 为 (1, 0), C 为 (a, b),这是因为对于任意一个三角形,总可以把 A 点移动到原点,然后旋转使 AB 与…
题目链接: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] 表示有…
题目链接:https://ac.nowcoder.com/acm/contest/881/C 题目大意 给定 m 和 n 个整数 ai,$-m \leq a_i \leq m$,求$\sum\limits_{i = 1}^{n} (\frac{a_i}{m} - p_i)^2$在约束条件$\sum\limits_{i = 1}^{n} p_i = 1, p_i \geq 0$下的最小值. 分析 首先,为了方便计算,可以把 p 坐标都扩大 m 倍,最后结果除个 m2 即可. 如此一来只需要算$\s…
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 个数组 u,v,长度都为 m,且元素值互不相同,对于 [1, m] 的任意一个子区间 [L, R],都有 RMQ(u, L, R) = RMQ(v, L, R),那我们就说这两个数组是同构的. 现给定 2 个数组 a, b,求最大的 p,使得 a,b 在 [1, p] 上同构. 分析 假设 p 现在…
H XOR 题意 给出一组数,求所有满足异或和为0的子集的长度和 分析 n为1e5,所以枚举子集肯定是不可行的,这种时候我们通常要转化成求每一个数的贡献,对于一组数异或和为0.我们考虑使用线性基,对这一组数求线性基,设基的长度为r,由线性代数的知识我们可以知道,在这个数组中取一个数,这个线性基有唯一一种组成方式使得异或这个数为0.所以对于不在线性基的每一个数,他可以组成的子集个数为\(2^{n-r-1}\),所以所有不构成线性基的数的贡献为\((n-r)*2^{n-r-1}\),那么对于在线性基…
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的,那么我们就…
题意: n个点,分成两组A,B,如果点i在A中,那么贡献值\(a_i\),反之为\(b_i\). 现要求任意\(i \in A,j \in B\)不存在 \(x_i >= x_j\) 且 \(y_i <= y_j\),也就是说A中点不在B中点的右下方. 思路: https://blog.nowcoder.net/n/7205418146f3446eb0b1ecec8d2ab1da 代码: #include<cmath> #include<set> #include<…
2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从小数据尝试,经过搬砖搬到3-4个连乘式相消的时候,就可以发现规律了!(耐心耐心耐心,草稿纸书写规范) 公式化简过程见(懒狗是这样):https://blog.csdn.net/dillonh/article/details/96445321 #include<bits/stdc++.h> #def…
牛客多校第一场 B Inergratiion 传送门:https://ac.nowcoder.com/acm/contest/881/B 题意: 给你一个 [求值为多少 题解: 根据线代的知识 我们可以将分母裂项,然后根据 \(\int_{0}^{\infty} \frac{1}{1+x^2}dx=\frac{\pi}{2}-->\int_{0}^{\infty} \frac{1}{1+\frac{x}{a_i}^2}d\frac{x}{a_i}=\frac{\pi}{2}\) 可以推得 我们的…
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n-1,从0号点出发,每次向左走或者向右走的概率是相同的,问你出发后,经过n-1个点后,恰好到达点m的概率是多少,答案是一个前缀积 题解: 讨论两个点的情况: 点0->1的期望是1 讨论三个点的情况 假设我们要到点3,我们必须经过点2,然而我们到了点2可能会再回到点1再到达点3,所以我们讨论必须经过的…
题目链接 传送门 题意 给你\(n\)个点,每个点的坐标为\((x_i,y_i)\),有两个权值\(a_i,b_i\). 现在要你将它分成\(\mathbb{A},\mathbb{B}\)两部分,使得在满足"\(\mathbb{A}\)的点不能落在在\(\mathbb{B}\)的点的右下方"的条件下\(\sum\limits_{i\in\mathbb{A}}a_i+\sum\limits_{j\in\mathbb{B}}b_j\)最大. 思路 这篇博客讲得很详细,大家可以看这位大佬的昂…
题目链接 传送门 题意 求\(n\)个数中子集内所有数异或为\(0\)的子集大小之和. 思路 对于子集大小我们不好维护,因此我们可以转换思路变成求每个数的贡献. 首先我们将所有数的线性基的基底\(b\)求出来(设秩为\(r\)),然后非基地元素的贡献就是\(2^{n-r-1}\),即选择这个数然后其他所有非基底元素都可以选择或者不选择两种方法,选择非基底元素后我们再从基底里面挑出能过把它异或为\(0\)的数选出来就可以达到题目的要求. 对于基底元素\(x\),我们将非基底的\(n-r\)个元素再…
题目链接 传送门 思路 首先我们对\(\int_{0}^{\infty}\frac{1}{\prod\limits_{i=1}^{n}(a_i^2+x^2)}dx\)进行裂项相消: \[ \begin{aligned} &\frac{1}{\prod\limits_{i=1}^{n}(a_i^2+x^2)}&\\ =&\frac{1}{(a_1^2+x^2)(a_2^2+x^2)}\times\frac{1}{\prod\limits_{i=3}^{n}(a_i^2+x^2)}&a…
题目链接 传送门 题意 给你\(n\)个数\(a_i\),要你在满足下面条件下使得\(\sum\limits_{i=1}^{n}(a_i-p_i)^2\)最小(题目给的\(m\)只是为了将\(a_i\)变成一个整数,那么我们就当此处的\(p_i\)扩大为题目给的\(m\)倍,然后把\(m\)放到分母去,以下不再解释): \(p_i\in\mathbb{R}\): \(p_i\geq 0,i\in[1,n]\): \(\sum\limits_{i=1}^{n}p_i=m\). 思路 由于叉姐的题解…
题目链接 传送门 思路 首先我们知道\('A'\)在放了\(n\)个位置里面是没有约束的,\('B'\)在放了\(m\)个位置里面也是没有约束的,其他情况见下面情况讨论. \(dp[i][j]\)表示放了\(i\)个\('A'\)和\(j\)个\('B'\)的方案数,然后考虑转移到下一个状态: 如果\(i\leq n\),那么\('A'\)可以随意放: 如果\(j\leq m\),那么\('B'\)可以随意放: 如果\(i> n\),那么要放\('A'\)需要放了\('A'\)后多余的\('A'…
Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m,使得两个数组中[1,m]任一区间的最小值标号都相同 分析 想到最小值标号并且是在一维数组中,就要很自然地想到单调栈,同时笛卡尔树和单调栈密不可分,所以衍生了两种解法. 解法1:单调栈 从左到右扫,如果左边界相同,则继续往左扫,直到找到最大值. 证明reference:https://www.cnb…
Second Large Rectangle 题目传送门 解题思路 先求出每个点上的高,再利用单调栈分别求出每个点左右两边第一个高小于自己的位置,从而而得出最后一个大于等于自己的位置,进而求出自己的位置的高为高,这个点所在的边为底的最大矩形.这些求出的矩形中的最大值即为可求出的最大矩形.而次大值可能是这些矩形之一,也可能是这些矩形的高减1或者宽减1得到的矩形.所以把这些全都记录下来,第二大的即为答案.由于这样求出的矩形会有重复,所以记录一下坐标来去重. 代码如下 #include <bits/s…
题目链接:https://ac.nowcoder.com/acm/contest/882/E 题目大意:有一个\(n\times m\)的01矩阵,一开始可以从第一行的一个点出发,每次可以向左.向右.向下移动一格且不能回头.中途会有一些点变为障碍物(用1表示),或者从障碍物变回可以通过的格子,同时还需要处理询问:从\((1,a)\)出发,走到\((n,b)\)的方案数有多少种.\(n\leq 50000,\ m\leq 10\) 题解:设\(f(i,j)\)为走到\((i,j)\)的方案数,且第…
题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保证没有三线共点或者两直线重合,\(n\leq 1000,\ m\leq 10000\) 题解:先考虑最多会有多少个区域,由于第\(i\)条直线最多与前面的\(i-1\)条直线同时相交,所以交点个数和区域个数都是\(n^2\)级别的,考虑求出所有区域的面积并排序 首先预处理所有的交点,并记录与该交点相…
原题:https://ac.nowcoder.com/acm/contest/889/J 题意: 二维平面上有n个矩形,每个矩形左下角是(i−1,Li)(i−1,Li), 右上角是(i,Ri)(i,Ri),矩形一开始全是黑色,平面不被矩形覆盖的地方是白色,你要把某些黑色区域涂白(一个矩形可以内部颜色不一样),使得黑色区域是一个轴对称图形并且对称轴平行于x轴,求最大黑色区域面积 思路: 经过分析发现ans关于对称轴y是一个线性的函数,而函数的最大值点只可能在 中线处取到,因此我们只需要从下往上枚举…
题目链接:https://www.nowcoder.com/acm/contest/139/J 题目: 题意:给你n个数,q次查询,对于每次查询得l,r,求1~l和r~n元素得种类. 莫队思路:1.将元素copy一份到最右边然后对于每次查询得l,r,我们就可以转换成求r,l+n这一个连续区间得元素种类,就将其转换成了一个莫队模板题了(比赛时还不会莫队就随便找了个板子): 2.将移动的两个指针l设为0,r设为n+1,然后进行莫队即可. 做法一代码实现如下: #include <cstdio> #…