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的连续段的元素和的最小值)

最后依次枚举子矩阵的长和宽。

#include<cstdio>
#include<iostream>
using namespace std;
#define LL long long
int main()
{
LL x;
int n,m,num1[],num2[];
int sub1[],sub2[],sum1[],sum2[];
sum1[]=sum2[]=;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=; i<=n; i++)
{
scanf("%d",&num1[i]);
sum1[i]=sum1[i-]+num1[i];
sub1[i]=*;
} for(int i=; i<=m; i++)
{
scanf("%d",&num2[i]);
sum2[i]=sum2[i-]+num2[i];
sub2[i]=*;
} scanf("%I64d",&x); for(int i=; i<=n; i++)
for(int j=i; j<=n; j++)
{
int len=j-i+;
sub1[len]=min(sub1[len],sum1[j]-sum1[i-]);
}
for(int i=; i<=m; i++)
for(int j=i; j<=m; j++)
{
int len=j-i+;
sub2[len]=min(sub2[len],sum2[j]-sum2[i-]);
} int res=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if((LL)sub1[i]*sub2[j]<=x) //两个sub相乘可能超int
res=max(res,i*j);
printf("%d\n",res);
}
return ;
}

codeforces_C. Maximum Subrectangle的更多相关文章

  1. CF1060C Maximum Subrectangle【乘法分配律】【最大子矩阵】

    CF1060C Maximum Subrectangle 题意翻译 现在给出一个长度为N的a数列,一个长度为M的b数列. 现在需要构造出一个矩阵c,其中ci,j​=ai​×bj​.再给出一个x,请在矩 ...

  2. C. Maximum Subrectangle

    链接 [http://codeforces.com/contest/1060/problem/C] 题意 给你两个数列,可以构成一个矩阵C,ci,j=ai⋅bj 1≤x1≤x2≤n , 1≤y1≤y2 ...

  3. Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)

    https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...

  4. cf1060C. Maximum Subrectangle(思维 枚举)

    题意 题目链接 Sol 好好读题 => 送分题 不好好读题 => 送命题 开始想了\(30\)min数据结构发现根本不会做,重新读了一遍题发现是个傻逼题... \(C_{i, j} = a ...

  5. CF1060C Maximum Subrectangle

    思路: 不难发现,对矩阵中的数字求和实际上是先分别对a,b两个数列中对应子段的元素求和再相乘.题目是要求在和不超过给定值的情况下使选出的矩阵面积最大.我们反其道而行之,考虑在子段长度一定的情况下,和最 ...

  6. Codeforces 1060C Maximum Subrectangle(子矩阵+预处理)

    题意:给出数组a,b,组成矩阵c,其中$c_{ij}=a_i*b_j$,找出最的大子矩阵,使得矩阵元素和<=x,求这个矩阵的size n,m<=2000 思路:对于子矩阵(l1...r1) ...

  7. Codeforces Round #513 总结

    首次正式的$Codeforces$比赛啊,虽然滚粗了,然而终于有$rating$了…… #A  Phone Numbers 签到题,然而我第一次写挂了(因为把11看成8了……) 只需要判断一下有多少个 ...

  8. Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) C D

    C - Maximum Subrectangle 因为是两个数组相乘的到的 矩阵所以  a(i ->j)*b(x->y) 的面积 就是   a(i ->j) 的和乘与b(x-> ...

  9. Codeforces Round #513 游记

    Codeforces Round #513 游记 A - Phone Numbers 题目大意: 电话号码是8开头的\(1\)位数字.告诉你\(n(n\le100)\)个数字,每个数字至多使用一次.问 ...

随机推荐

  1. YTU 2980: 几点了

    2980: 几点了 时间限制: 1 Sec  内存限制: 128 MB 提交: 37  解决: 9 题目描述 现有一个Time类可以用来记录时间,请输出Time记录的时间加上s秒后的时间. 只需提交补 ...

  2. YTU 1005: 渊子赛马

    1005: 渊子赛马 时间限制: 1000 Sec  内存限制: 64 MB 提交: 338  解决: 49 题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为&qu ...

  3. Ubuntu下搭建基于apache2的gerrit+gitweb服务器

    说明:Ubuntu版本12.04 1. 配置gerrit管理帐号 1 sudo adduser gerrit 增加sudo权限: 1 sudo usermod -a -G sudo gerrit 切换 ...

  4. EF 6.0 The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. c#中的时间

    在SQL server 中,有两种日期时间类型: 1.DateTime 它的范围是 1753-1-1 至 9999-12-31 2.DateTime2 它的满园是 0001-01-01 至 9999- ...

  5. asp.net 常用代码

    asp.net 下拉菜单选中 ddlCity.SelectedIndex = ddlCity.Items.IndexOf(ddlCity.Items.FindByValue(")); 关于. ...

  6. js 获取url的request参数

     方法1: function getRequest(strParame) { var args = new Object(); var query = location.search.substrin ...

  7. E20170524-gg

    Awesome   adj. 可怕的; 令人敬畏的; 使人畏惧的; 极好的;

  8. P4475 巧克力王国(KDTree)

    传送门 首先可以把约束条件看成一条直线,然后每个巧克力看成一个点,求给定区域内的点权和 用KDTree,每次判断一下当前矩形是否整个都在里面或都在外面,是的话直接返回,否则的话递归 注意,必须该矩形四 ...

  9. 第四章之S5PV210内存初始化

    1,既然UART可以打印出信息来,那我们可以打印内存中的值.在506行添加如下代码: /***UART transmit function by xu ***/ display_addr_dat: l ...

  10. python 37条编程技巧-汇总(转载+整理)

    1.原地交换两个数字 x, y =10, 20 print x, y y, x = x, y print x, y 10 20 20 10 2.链状比较操作符 n = 10 print 1 < ...