题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问题,一般解决就是两个方向: A:压缩一维,即枚举上下边界,然后复杂度O(N^3); B:广告牌问题,即枚举下边界s,那么久可以看成s为底的一些高楼,再高楼上布置广告牌,复杂度O(N^2). } 这里光看复杂度我们就能看出肯定是B类问题,我们之前已经知道怎么求出每个矩阵了,但是我们怎么确定他是最大不可延伸的…
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我们就知道可以n^3,前面这题我(看付队博客)讲过求一个最大的什么矩阵就是分两种情况, 第一种:枚举上下边界,转化为一维,复杂度n^3 第二种:枚举下边界,转化为高楼问题,复杂度n^2 这里显然复杂度可以n^3,我们就想一下三场循环,这题实际上就是找到矩阵内的最大值最小值 第一层肯定是枚举上边界 第二层我们…
Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m,使得两个数组中[1,m]任一区间的最小值标号都相同 分析 想到最小值标号并且是在一维数组中,就要很自然地想到单调栈,同时笛卡尔树和单调栈密不可分,所以衍生了两种解法. 解法1:单调栈 从左到右扫,如果左边界相同,则继续往左扫,直到找到最大值. 证明reference:https://www.cnb…
传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思路:先用单调栈,跑出数组 a 和 b 中每个元素的左边第一个比他小的数的位置和右边第一个比他小的数的位置,左边的下标加1,右边的下标减1,那么就得到了每个数字的以这个数为区间的最小值的区间. 然后再对于两个数组的每个数字的区间去遍历.对于一个总长度为n的数组来说,从第一个去开始比较,如果这两个数的左…
题意:给出由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…
https://ac.nowcoder.com/acm/contest/883/B 首先先把0所在的位置变-1,1所在位置变1,然后统计一个前缀和,用sum[i]表示. 那么如果从起点开始的话只要满足条件的子串那么sum[i]的值就是0 如果子串起点不为0,那么只要以前出现过sum[i]的值,这两个值之间的串就一定是合法的子串. 例如: 标号:1  2  3  4  5 数值:0  0  1  1  0 sum:-1 -2 -1 0 -1 i==4的时候sum[i]==0,所以1-5间合法,长度…
A.digits 2 传送门 题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数.n不超过100,要求的数不超过10000位数. 题解:直接将n输出n次. 代码: #include <bits/stdc++.h> #define ll long long using namespace std; int main() { int T,n; for (scanf("%d",&T);T--;) { scanf("%d",&am…
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键字,y为第二关键字从小到大排序.找到最中间两个点.然后以这两个点为界限,将平面划分为左右两个点数相同的区域.如图所示. 由于题目中给出点的坐标绝对值≤1000,而我们需要给出的点的坐标范围为1e9,因此必定可以找到这样一条很陡的直线. AC代码: #include <bits/stdc++.h>…
A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h’的数量至少占s串长度的25%,输出  “Harmful” 如果字符串中‘h’的数量最多占s串长度的10%,输出  “Recyclable” 否则,如果字符串中‘d’的数量至少是‘w’的两倍,输出 “Dry” 否则输出 “Wet” 题解:判断即可. 代码: #include <bits/stdc++…
题目链接 题意 好吧,这道题我其实看都没看过,队友跟我说了说这道题是模拟题,卡时间.然后我就上了-- 大致就是维护一个线性表,然后有两种操作:插入.查询 插入时,如果这个值(string)之前出现过,则把之前那个值(string)放到线性表的表尾(删去原来那个),但是保存的值(int)仍是之前那个值(int).如果没有出现过,则把它插入到表尾.如果插入后发现线性表长度超过 m ,则弹出表头的元素. 查询时,如果有这个值(string),然后根据要求查询这个值(string)的上一个或者下一个,再…
题目 题意: 给你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 ,…
A.Equivalent Prefixes 传送门 题意:给你两个数组,求从第一个元素开始到第p个元素 满足任意区间值最小的元素下标相同的 p的最大值. 题解:我们可以从左往右记录到i为止每个区间的最小值有哪些,因为每个值都是不一样的,对于当前的 i 如果1~i中每个区间最小值数量相同那么下标肯定也会相同,否则记录的值的数量就会不同,我们可以用单调栈记录目前为止每个区间的“最小值”的下标,栈里面元素数量不同时肯定不满足条件. 代码: #include <bits/stdc++.h> #defi…
题意 给定两个$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维护…
F-Partition problem https://ac.nowcoder.com/acm/contest/882/F 题意:输入一个数n,代表总共有2n个人,然后每个人对所有人有个贡献值,然后问题需要将2n个人分成两组,每组n个人,问如何分组使得两组之间的价值最大,同组人不算价值. 思路:直接dfs暴力分组. //aeha #include<bits/stdc++.h> using namespace std; typedef long long int ll; typedef unsi…
链接:https://www.nowcoder.com/acm/contest/147/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Niuniu has recently learned how to use Gaussian elimination to solve systems of linear equations. Given n and a[i], wh…
传送门 题意: 先输入一个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\…