文章目录

  • 题目
  • 题目大意
  • 思路
  • 代码

题目

传送门

题目大意

给出分别有N,MN,MN,M个元素的序列a,ba,ba,b,定义一个乘积矩阵,其中的元素ci,j=ai×bjc_{i,j}=a_i\times b_jci,j​=ai​×bj​,找到它的一个最大面积子矩阵,使得这个子矩阵的元素之和不大于给定的XXX。所有数都是正数,N,M≤2000N,M\leq 2000N,M≤2000。

思路

比赛的时候第一次151515分钟内切掉前222题,剧烈膨胀,结果大脑抽筋死在第333题。
设这个矩阵左上角为ci1,j1c_{i_1,j_1}ci1​,j1​​,右下角为ci2,j2c_{i_2,j_2}ci2​,j2​​,那么它的元素之和为:∑i=i1i2∑j=j1j2ai×bj\sum\limits_{i=i_1}^{i_2}\sum\limits_{j=j_1}^{j_2}a_i\times b_ji=i1​∑i2​​j=j1​∑j2​​ai​×bj​
化简一下得:∑i=i1i2ai∑j=j1j2bj\sum\limits_{i=i_1}^{i_2}a_i\sum\limits_{j=j_1}^{j_2}b_ji=i1​∑i2​​ai​j=j1​∑j2​​bj​
记录一下a,ba,ba,b的前缀和记为suma,sumbsum_a,sum_bsuma​,sumb​,于是得到:(suma[i2]−suma[i1−1])×(sumb[j2]−sumb[j2−1])≤X(sum_a[i_2]-sum_a[i_1-1])\times(sum_b[j_2]-sum_b[j_2-1])\leq X(suma​[i2​]−suma​[i1​−1])×(sumb​[j2​]−sumb​[j2​−1])≤X
相当于是从a,ba,ba,b中分别找一段元素之和乘起来不大于XXX。


以上内容是比赛时想到的。
然后先想了个O(logNlogM⋅NM)O(logNlogM·NM)O(logNlogM⋅NM),写着写着发现是错的。
然后想了个用set乱搞O((logN+logM)NM)O((logN+logM)NM)O((logN+logM)NM)的,交上去只过了样例,WA了三次后发现思路还是错的。

我直到比赛结束都觉得是个二分搜索。
于是我颓废了。


接下来是正解。
可以用O(N2)O(N^2)O(N2)和O(M2)O(M^2)O(M2)时间处理出a,ba,ba,b中长度为len的一段区间的最小元素和Sa[len],Sb[len]S_a[len],S_b[len]Sa​[len],Sb​[len]。

然后再用O(NM)O(NM)O(NM)枚举从aaa中选长度为iii,bbb中选长度为jjj的一段,它们乘积之和最小为Sa[i]×Sb[j]S_a[i]\times S_b[j]Sa​[i]×Sb​[j],如果这个值不大于XXX,说明可以,就更新答案。

我突然觉得自己不够贪心啊= =

代码

早上起来赶的,写得丑不要介意。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;#define MAXN 2000
#define LL long long
int N[2],X,Ans;
LL Sum[2][MAXN+5],MinSum[3][MAXN+5];int main(){scanf("%d%d",&N[0],&N[1]);for(int i=0;i<=1;i++)for(int j=1;j<=N[i];j++){int t;scanf("%d",&t);Sum[i][j]=Sum[i][j-1]+t;}scanf("%d",&X);memset(MinSum,0x7f,sizeof MinSum);for(int i=0;i<=1;i++)for(int len=1;len<=N[i];len++)for(int j=len;j<=N[i];j++)MinSum[i][len]=min(MinSum[i][len],Sum[i][j]-Sum[i][j-len]);for(int i=1;i<=N[0];i++)for(int j=1;j<=N[1];j++)if(MinSum[0][i]*MinSum[1][j]<=X)Ans=max(Ans,i*j);printf("%d",Ans);
}

CF513C Maximum Subrectangle相关推荐

  1. Maximum Subrectangle(矩阵,前缀和)

    You are given two arrays aa and bb of positive integers, with length nn and mm respectively. Let cc ...

  2. 【CodeForces - 1060C】Maximum Subrectangle (思维,预处理前缀和,dp,枚举长度)

    题干: You are given two arrays aa and bb of positive integers, with length nn and mmrespectively. Let  ...

  3. CF1060C Maximum Subrectangle

    现在给出一个长度为$N$的$a$数列,一个长度为$M$的$b$数列. 现在需要构造出一个矩阵$c$,其中$c_{i,j}=a_i \times b_j$.再给出一个$x$,请在矩阵中找出一个最大的矩形 ...

  4. Maximum Subrectangle(CodeForces-1060C#513)(预处理优化暴力)

    文章目录 前言 题目 题目大意: 数据范围 思路 $O(n^6)$ $O(n^4)$ $O(n^3log_n)$ $O(n^2log_{n^2})$ 代码 $O(n^2)$ 代码 题外话 前言 打的时 ...

  5. Codeforces Round #513

    A. Phone Numbers 题意:给一些数字,每个电话号码以8开头,11位,求最多组成多少个号码,重复累加. #include <bits/stdc++.h>using namesp ...

  6. Codeforces Round #513 总结

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

  7. HRBU 2021年暑期训练阶段三Day1

    目录 A - Similar Strings 题目链接: 题意: 做法: B - card card card 题目链接: 题意: 做法: C - String 题目链接: 题意: 做法: D - C ...

  8. 【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)

    目录 最小/最大操作(Minimum/maximum operations) 一.max 1.原型: 2.说明: 3.官方demo 二.max_element 1.原型: 2.说明: 3.官方demo ...

  9. Lintcode42 Maximum Subarray II solution 题解

    [题目描述] Given an array of integers, find two non-overlapping subarrays which have the largest sum.The ...

最新文章

  1. jboss 反序列化 getshell
  2. windows2003权限如何配置
  3. 上海2021年高考成绩排位查询,2021年上海各高中高考成绩排名及放榜最新消息
  4. 结构struct(值类型)在实际应用要注意的二点:
  5. 发一个统计项目代码行数的Java代码
  6. java 正则首位8或者9的8位数字_正则简单手机号和邮箱练习
  7. qt + opencv249配置转+续写
  8. 终于等到你:国内***团队360Vulcan公布iOS 12.1越狱漏洞细节
  9. TeX排版系统安装使用
  10. 梅特勒托利多xk3124电子秤说明书_梅特勒托利多电子称设置方法
  11. QCC512x QCC302x PIO 按键
  12. mysql 拼音查询_MySQL拼音首字母查询
  13. excel max函数的使用
  14. 100000以内的水仙花数C语言,找出1000000内的水仙花数
  15. 揭露富爸爸背后真正的秘密
  16. nyoj54小明的存钱计划
  17. Android 关于所谓的 深度睡眠 的问题
  18. [杂谈] 14. Catalan卡特兰数
  19. linux清除大文件命令,linux du df命令清除不要的大文件
  20. [344]python根据文章标题内容自动生成摘要

热门文章

  1. 【Add_two_numbers】
  2. VMware workstation安装虚拟机--Windows XP
  3. spring boot 源码解析23-actuate使用及EndPoint解析
  4. 学生成绩管理系统完整版
  5. 【python】用ChatGPT使用爬虫
  6. 【Python】判断闰年 + Calendar模块
  7. 大动作|阿里云扩招5000人!云计算、AI抢夺全球人才
  8. 为 什 么 有 的 文 件 不 可 以 重 命 名
  9. 吴恩达机器学习(一)—— 简介
  10. NTFS下的USN日志文件研究