C. Maximum Subrectangle】的更多相关文章

CF1060C Maximum Subrectangle 题意翻译 现在给出一个长度为N的a数列,一个长度为M的b数列. 现在需要构造出一个矩阵c,其中ci,j​=ai​×bj​.再给出一个x,请在矩阵中找出一个最大的矩形,使得这个矩形中的所有值的和小于等于x. 题目描述 You are given two arrays aa and bb of positive integers, with length n and m respectively. Let c be an n×m matrix…
链接 [http://codeforces.com/contest/1060/problem/C] 题意 给你两个数列,可以构成一个矩阵C,ci,j=ai⋅bj 1≤x1≤x2≤n , 1≤y1≤y2≤m 还有一个x,让你求一个子矩阵,使得矩阵元素和小于等于x,面积最大 分析 贪心,思维,只需要求出前缀和,还有长度为i,时子窜和最小 具体看代码 代码 #include<bits/stdc++.h> using namespace std; #define ll long long const…
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元素和<=x,子矩阵的面积尽量大,求这个子矩阵的面积大小 思路 一开始往二维前缀和+暴力+查询之类想了,没观察规律,复杂度怎么想都不对 规律其实就是 子矩阵的和等于两个数组的连续子序列和相乘,面积大小等于子序列长度相乘 即要在两个数组中找出两个连续的子序列,保证他们的和相乘<=x的情况下,长度的乘积…
题意 题目链接 Sol 好好读题 => 送分题 不好好读题 => 送命题 开始想了\(30\)min数据结构发现根本不会做,重新读了一遍题发现是个傻逼题... \(C_{i, j} = a[i] * b[j]\) 根据乘法分配律,题目就变成了在数组\(a, b\)中分别选一段连续的区间,要求权值和相乘\(<= X\),最大化区间长度乘积 \(n^2\)模拟一下即可 #include<bits/stdc++.h> #define Pair pair<int, int>…
思路: 不难发现,对矩阵中的数字求和实际上是先分别对a,b两个数列中对应子段的元素求和再相乘.题目是要求在和不超过给定值的情况下使选出的矩阵面积最大.我们反其道而行之,考虑在子段长度一定的情况下,和最小是多少.具体来说,首先分别计算a的长度为1,2,...,n的子段中的和的最小值,记为min1[i](i = 1, 2, ..., n).对b做类似处理得到min2[i](i = 1, 2, ..., m).然后枚举min1和min2的所有组合即可得出答案. 实现: #include <iostre…
http://codeforces.com/contest/1060/problem/C 题意: a.b数组长度分别为n.m.矩阵C,Cij=ai*bj.在C中找到一个子矩阵,该子矩阵所有元素和不大于x,求这样的子矩阵的最大面积. 思路: 1.将矩阵元素和转换为(Ai+……+Aj)*(Bk+……+Bl)的形式,即a数组中一段连续的元素和 乘以 b数组中一段连续的元素和. 2.由于只要求求出最大面积,故长和宽的起点终点位置任意,故只需统计a.b数组所有连续长度的最小元素和(例,a的长度为5的连续段…
题意:给出数组a,b,组成矩阵c,其中$c_{ij}=a_i*b_j$,找出最的大子矩阵,使得矩阵元素和<=x,求这个矩阵的size n,m<=2000 思路:对于子矩阵(l1...r1)*(l2...r2),矩阵元素和为(a[l1]+a[l1+1]+...+a[r1])*(b[l2]+b[l2+1]+...+b[r2]) 这样处理出长度为i的连续数组最小和aa[i],bb[i],再枚举一下长度即可 代码: #include<iostream> #include<cstdio…
首次正式的$Codeforces$比赛啊,虽然滚粗了,然而终于有$rating$了…… #A  Phone Numbers 签到题,然而我第一次写挂了(因为把11看成8了……) 只需要判断一下有多少个8,再特判一下能存在多少个号码就好了 #B  Maximum Sum of Digits 我的做法是暴力打表找规律,发现全都是向下取除首位外其他都是9的数作为一个加速,然后就没了 然而没发现0也是可行的……又WA了一次 #C  Maximum Subrectangle 苦像$20min$没有思路,只…
C - Maximum Subrectangle 因为是两个数组相乘的到的 矩阵所以  a(i ->j)*b(x->y) 的面积 就是   a(i ->j) 的和乘与b(x->y)的和 所以我们枚举 a 序列 从1-n的长度和  B序列同理 然后 枚举两个序列和相乘 找一个最大即可 #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define LL long long #defin…
Codeforces Round #513 游记 A - Phone Numbers 题目大意: 电话号码是8开头的\(1\)位数字.告诉你\(n(n\le100)\)个数字,每个数字至多使用一次.问最多能凑出多少个电话号码. 思路: 统计8出现的次数,如果有多余的8不能作为开头,那么就将其放到后面去 源代码: #include<cstdio> #include<cctype> #include<algorithm> inline int getint() { regi…