题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 1 1 1 1 1 有篇博主的代码细节处理的很好,由于矩阵每行的长度一致,则不必重复在数组末尾标记0:然后由于j是从1,最开始如果push进0的话,有两个好处: 1.可以不受栈之前"残留"的元素m+1的影响 2.不用再判断栈是某为空来确定wid的值 Code #include <b…
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一下这一道题,首先看到n不是多大就想用dfs(超时),又在dfs的基础上记忆化(超时),大概是我记忆化不完全.又想用01背包,打出来代码后发现s就是体积,但是s的范围太大了,数组存不下 T_T 看题解发现用一个叫 折半枚举(就是一种思想) 和 二进制枚举 的东西 折半枚举:比如有时集合过大无法全部搜索…
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" catalog: true tags: mathjax: true - ACM-ICPC 题意 给你两个由数字组成的字符串\(S\),\(T\) 长度为\(1e3\),问你S中有多少个子序列的值大于字符串T: 思路 首先在比赛的时候一眼确定是\(N^2\) 复杂度的DP,但是想了两三个小时却没想到怎么转移,各种…
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 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)RMQ(u,l,r)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤m where RMQ(w,l,r)RMQ(w,l,r) denotes the index of…
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 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)RMQ(u,l,r)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤mwhere RMQ(w,l,r)RMQ(w,l,r) denotes the inde…
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意子区间的最小值下标相等. 思路:用递归思想,假设前k个元素等价,即(a1,ak)和(b1,bk)等价,现在加入ak+1和bk+1,仍满足等价的条件是从右到左第一个小于ak+1的元素下标和第一个小于bk+1的元素的下标相等,这个不访模拟一下就可以YY出来,所以就用到了单调栈,想了好久没想到,队友太牛逼…
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Bobo knows that ∫ ∞ 0 1 1 x 2 d x = π 2 . ∫0∞11+x2 dx=π2. Given n distinct positive integers a 1 , a 2 , -…
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if R M Q ( u ,…
题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $[link]$ 分析 这题有两种做法,笛卡尔树和单调栈,这里暂且只介绍单调栈的做法. 我们先假设$p=i$成立,考虑新加进来的$i+1$,如果以$i+1$为右端点构成的所有区间最小值相同,那么$p$就可以更新为$i+1$(这样的话就可以通过小区间的最小值位置相同依次证明大区间的最小值位置相同).或者换句话说,…
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them into either red team or white team such that each team consists of exactly N people and the total competitive value is maximized. Total competitive va…
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才mod下没有二次剩余,所以不能这么做了.可以分解mod,然后利用循环节搞. zoj: #include <bits/stdc++.h> using namespace std; typedef long long LL; ; ; LL fac[N],A[N],B[N]; void Init() {…
题目链接:https://ac.nowcoder.com/acm/contest/888/A 题意:给n×m的01矩阵,求出其中全为1的矩阵个数(不被其它全1矩阵包括). 思路:和第二场多校的次大子矩阵类似.二维降一维,遍历行,以第i行为矩阵的底,通过单调栈得到矩阵向左向右能够扩展的范围 l[j]和r[j],然后关键在去重.有两种重复,第一种是同一行中的矩阵,可以用二维矩阵vis[l[j]][r[j]]标记此范围的矩阵已被记录.对于列的重复,是因为此时的矩阵能在下一行得到行扩展,所以预处理得到下…
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unlike the first four levels, they should do some moves in this level. There are nn_{}n​ vertices and mm_{}m​ bidirectional roads in this level, each road…
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Amy asks Mr. B  problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack…
链接:https://ac.nowcoder.com/acm/contest/886/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Rowlet is playing a very popular game in the pokemon world. Recently, he has encountered a problem and wants to ask for…
题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目:给n×m的由01组成的矩阵,求次大全1子矩阵的大小. 思路:第一步还是降维操作,用a[i][j]记录以第i行为底的全1直方图的高,如对于矩阵: 其矩阵a为: 之后对于每一行的所有列用单调栈维护每个数左/右边第一个比它小的值的下标,则以a[i][j]为高的矩阵最大为(r[j]-l[j]+1)×a[i][j],然后维护更新max1,max2即可. 需要注意的是,max1维护最大矩阵的大小,max2维护…
传送门 题意: 先输入一个n,代表两个数组里面都有n个数,然后让你从中找到一个p<=n,使其满足(1<=l<=r<=p<=n)可以让在(l,r)这个区间内在两个数组中的的最小值的下标一样 题解: 参考博客: 我一直认为区间起点l一直是1,突然发现他还可以变T_T p为1肯定对着咧 当p大于1的时候,我们只需要判断两个数组中的每一个位置在左边遇见的第一个最小值的位置是相同的,一直找到不相同的位置,那个位置就是最大的p,那么这样的话就可以通过小区间的最小值位置相同依次证明大区间的…
https://ac.nowcoder.com/acm/contest/881/H 题意: 给定n个整数,求其中异或和为 \(0\) 的子集的大小的和. 题解思路: 首先转化为每个可以通过异或表示 \(0\) 的数贡献它参与的子集数. 思考的过程分两步.一开始不管三七二十一先对 \(n\) 个整数求一次线性基 \(B_1\) ,记其秩为 \(r\) . 第一步: 先考虑线性基 \(B_1\) 外的数(假如有的话)产生的贡献.枚举每一个数,记这个数为 \(x\) ,除去这个数,线性基 \(B_1\…
题意:给定数组,求所有异或起来为0的集和的大小之和. 思路:由于是集合大小,我们换成考虑每个元素在多少个集合里有贡献. 先生成线性基. 对于没有插入线性基的元素x,贡献是2^(N-base-1),因为x选择之后,其他非基元素无论选还是不选,都可以调整基来使得异或和为0. 对于插入线性基的元素x,我们也同样这样考虑,把除了它的N-1个数生成线性基. 就可以同样算贡献了. 这里现在可以稍加优化,把最开始的非基元素预处理成一个线性基,这样生成新的线性基就快起来了. #include<bits/stdc…
题意问你有多少个长度为2*(n+m)的字符串满足A和B数量相等 且可以分割为n个AB子序列和m个BA子序列 很容易得出前n个A肯定是可以给AB的 后面的m个A给BA 所以当一个字符串满足条件时要满足任意前缀满足 A的个数不大于B的个数+n  B的个数不大于A的个数+m 这两个条件 则我们把B当Y轴 A当X轴 可以画图 要求的即是从(0,0)到(n+m,n+m)的路径数  dp一下就出来了 #include<bits/stdc++.h> using namespace std; ; ; ][ma…
题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点的右下方). 求MAX(Sigma ai+Sigma bi). 思路: dp+线段树. https://blog.csdn.net/qq_41194925/article/details/97079075 就是有一个要注意的地方:对于枚举的点我们算的是B集合所以dp[i]=max(1~i)+bi,这…
题意 给出n个点,每个点有a,b两个属性,让你从左下角到右上角划一条线,线的左边每个点的贡献是\(a_i\),线的右边每个点的贡献是\(b_i\),使得两部分的总和最大. 分析 找一条折线将点分割开,使总和最大. 把y离散化,然后点按x排序,设\(dp[i]\)为经过第\(i\)个点(该点当作B集合中的点)的折线的权值,之前的点中在这个点上面的点dp值要加上\(b[i]\),之前的点中在这个点下面的点的dp值要加上\(a[i]\) \(dp[i]=max(dp[i],dp[k]+b[i]),y[…
题意 给n个整数,求满足子集异或和为0的子集大小之和. 分析 将问题转化为求每个元素的贡献次数之和. 先对n个数求线性基,设线性基大小为r,即插入线性基的数字个数为r,可以分别计算线性基内数的贡献和线性基外的数的贡献 线性基外:共n-r个数,枚举每个数x,它可以和将线性基外剩余的n-r-1个数同时存在一个集合内,显然共有\(2^{n-r-1}\)个集合,所以x的贡献为\(2^{n-r-1}\). 线性基内:枚举每个数x,将剩余的n-1个数再求一次线性基,设为B,分两种情况: x不能被B异或出.那…
题目链接:https://ac.nowcoder.com/acm/contest/881/E 题意:求可分解成n个AB和m个BA的字符串的个数. 思路: 首先根据贪心思想,前n个A可作为AB的A,后m个A作为BA的A.可以证明,如果将前n个A中的一个作为BA的A,那一定可以从后面找到一个A来替代这个A.同理,前m个B作为BA的B,后n个B作为AB的B. 如果不满足上面条件,一定不能满足n个AB和m个BA的要求. 那么可以用dp来做,用dp[i][j]表示有i个A和j个B的前缀方案数.根据下一个选…
链接:https://ac.nowcoder.com/acm/contest/881/B 题意:给出n,和数组a[n],求特定表达式取模后的值. 思路:用到列项相消:…
https://ac.nowcoder.com/acm/contest/881/B https://www.cnblogs.com/zaq19970105/p/11210030.html 试图改写多项式: \[\frac{1}{\prod_{i=1}^{n}a_i^2+x^2}\] 这个多项式用待定系数法设为: \[\frac{1}{\prod_{i=1}^{n}a_i^2+x^2}=\sum_{i=1}^{n}\frac{c_i}{a_i^2+x^2}\] 其中 \(c_i\) 是常数(不太理…
https://ac.nowcoder.com/acm/contest/881/E 从dp的角度来看是比较正常的.无后效性来源于前面只要的合法的方案分配,那么对后面造成的影响就只有A,B的数目. 从贪心的角度看,前n个A必定是给AB用的,前m个B必定是给BA用的.否则假如有一个BA用了一个前n个A里的A,那么可以把这个A和后面的某个A互换所在的组. --- dp参考JHSeng大佬的题解. 设 \(dp[i][j]\) 表示放置 \(i\) 个A,放置 \(j\) 个B的合法方案数.显然 \(d…
A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的意思是在其任意一个子区间内的最小值相同. 考虑使用单调栈去弄它.每次单调栈中的元素会回答以栈顶元素为结尾的区间的最小值是多少. 比如数组: 2,4,3,5,1 前1个元素的单调栈: {{2,1}} 意思是[1,1]的最小值是2 前2个元素的单调栈: {{2,1},{4,2}} 意思是[1,2]的最小值是2,[…
传送门 知识点:卡特兰数/动态规划 法一:动态规划 由题意易知字符串的任何一个前缀都满足\(cnt(A) - cnt(B) \le n , cnt(B)-cnt(A)\le m\) \(d[i][j]\) 表示前\(i\) 个字符,有 \(j\) 个\(A\) ,有\(i-j\) 个\(B\) 的方案数 \(d[0][0] = 1,d[2*n+2*m][n+m] 为答案\) 当\(j-(i-j)\le n,(i-j)-j\le m\) 时,\(d[i][j] = d[i-1][j] + d[i-…
题意:给你n个数字,然后让你求所有满足异或和为0的子集的大小之和. 先对n个数求线性基,设线性基大小为r,可以分别计算线性基内数的贡献和线性基外数的贡献 1.线性基外:共n-r个数,枚举每个数x,将线性基外剩余的n-r-1个数任意排列,显然共有 2^(n−r−1)个集合,这些集合再异或x的结果还是能被线性基异或出,所以x的贡献为 2^(n−r−1). 2.线性基内:枚举每个数x,将所有剩余的n-1个数再求一次线性基,设为B,分两种情况: (1) x能被插入线性基.那么显然x不能在任意一个集合中出…