原题链接

分析

题目要求我们找子矩阵。要求子矩阵最外圈为1,并且除最外圈外,0和1的个数相差不能超过1,矩阵的长宽必须大于1。也没啥特殊的做法,就是暴力。数据量最大为500,稍加思考,O(n4)O(n^4)O(n4)不足应付,那考虑用前缀和降低时间复杂度,可以降到O(n3)O(n^3)O(n3)。代码意思很简单,矩阵中的0改为-1,用b数组表示纵向的前缀和,先二重循环找行,然后一重循环找列,数组s表示i行和j行之间到k列的前缀和。横向的连续1区间比较好判断,那如何判断纵向区间内是否全是1?借助先前的b数组,若bjk−bi−1k==j−i+1b_{jk}-b_{i-1k}==j-i+1bjk​−bi−1k​==j−i+1,则第kkk列第iii行到第jjj行全部是1。接下来就简单了。

代码

#include<iostream>
#define ll long long
using namespace std;
const int N=25e4+5,M=505;
int n,m;
int f[N*2],s[M],a[M][M],b[M][M];
ll ans;
int main()
{ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>a[i][j];if(!a[i][j])a[i][j]=-1;b[i][j]=a[i][j]+b[i-1][j];}s[0]=N;//初始化for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){int pre=1;//区间起始位置for(int k=1;k<=m;k++){if(a[i][k]!=1||a[j][k]!=1)//有0,排除此情况{for(int l=pre;l<=k;l++)if(b[j][l]-b[i-1][l]==j-i+1)f[s[l]]--;//有i行到j行全1的列就减pre=k+1;//直接跳到k的后一个位置s[k]=N;continue;}if(b[j][k]-b[i-1][k]==j-i+1)ans+=f[s[k-1]]+f[s[k-1]+1]+f[s[k-1]-1];s[k]=s[k-1]+b[j-1][k]-b[i][k];//j-1行减去i+1行if(b[j][k]-b[i-1][k]==j-i+1)f[s[k]]++;}for(int l=pre;l<=m;l++)if(b[j][l]-b[i-1][l]==j-i+1)f[s[l]]--;//将f数组清空}cout<<ans;
}

2020牛客多校九J-The Escape Plan of Groundhog相关推荐

  1. 2020 牛客多校第一场

    2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...

  2. 2020牛客多校 J Easy Integration 计算过程详解【点火公式(Wallis积分)+组合数学】

    2020牛客暑期多校训练营(第一场) J Easy Integration 题 网上题解大多是 不断分部积分求解,其实有更为简洁的解法. 便是 Wallis积分(点火公式) + 组合数学 求解,本文给 ...

  3. [2020牛客多校第一场]Coda的题解集

    被暴打了. 会先写比赛中过题数100+的题目,其他的以后再补. 施工中,未完待续- F Infinite String Comparision 一开始想到的是对比到lcm(|a|,|b|),意料之中T ...

  4. 2020牛客多校联赛第四场 (BFH)

    文章目录 B:Basic Gcd Problem 题目 翻译 例子 大意 思路 代码 F:Finding the Order 题目 翻译 例子 大意 思路 代码 H:Harder Gcd Proble ...

  5. 数论分块 ---- 2020牛客多校第7场H-Dividing[思维+数论分块]

    题目大意: 解题思路:很明显满足条件的点是n%k==0∣∣n%k==1n\%k==0||n\%k==1n%k==0∣∣n%k==1 1.因为nnn是从111开始的如果一直乘以k[n=n∗k]k[n=n ...

  6. 2020牛客多校第一场B虚树+质数筛+换根dp

    题目大意: 1.可以发现阶乘增长是很快的所以你要把整颗树建立出来是不实际的. 2.我们可以假设这棵树已经建出来出来了我们应该怎么搞 首先很明显是一个树形dp, 我们设dp[j],是以j为u到其他点距离 ...

  7. 2020牛客多校第3场:[Points Construction Problem + 思维题+构造]

    题目链接 题目大意:就是给你n个边长为1的正方形,要求用这些正方形拼成周长为m的图形,并输出这些正方形的坐标,如果没有输出No 首先如果这些正方形都零散分布那么周长就是4∗n4*n4∗n,如果将这些正 ...

  8. exgcd ---- 2020牛客多校第三场:[Fraction Construction Problem:exgcd+思维题]

    题目链接 题目大意:就是给你两个数a,ba,ba,b叫你求满足下面三个条件的c,d,e,fc,d,e,fc,d,e,f 1.cd−ef=ab1.{c\over d}-{e\over f}={a\ove ...

  9. 2020牛客多校第1场I-1 or 2一般图最大匹配带花树

    链接:https://ac.nowcoder.com/acm/contest/5666/I Bobo has a graph with n vertices and m edges where the ...

  10. 2021牛客多校1——J:Journey of Railway Stations(线段树)

    题面 题意: 一段路上有 N N N​​​​ 个火车站,每个火车站有一个合法时间段 [ u i , v i ] [u_i, v_i] [ui​,vi​]​​​​​,相邻两个火车站有一个长度 c o s ...

最新文章

  1. 【每日一算法】杨辉三角 II
  2. 怎么删除XP中无法删除的文件
  3. 关于外挂新手最常见的30个问题
  4. asp.net学习之Repeater控件
  5. VS2008下编的程序生成的EXE 在没有安装VS2008的计算机上能运行
  6. 12亿行代码,阿里巴巴这一年的技术报告和梦想报告
  7. 针对ASP.NET MVC的SEO优化笔记
  8. atom常用的插件整理
  9. 初学swift笔记-数组、字典、元组(三)
  10. C++ std::vector 一维 二维数组 初始化 为0
  11. mysql必知必会样例表_《SQL必知必会》笔记1-样例表说明及建表语句
  12. 人人网 校内- 日志分享
  13. Python识别中国工作日,节假日,调休日。—已更新2022年
  14. 运放失真罪魁祸首之压摆率和增益带宽积
  15. VS Code 基础入门使用(配置)教程
  16. Robust Medical Instrument Segmentation Challenge 2019拜读
  17. android百度字体大小设置快捷键,(安卓)百度输入法定制版 — 清爽无广告
  18. 如果长颈鹿哭了,它会不会要哽咽好久
  19. WebRTC学习笔记七 pion/webrtc
  20. 【讲座回顾】不会被AI取代的人

热门文章

  1. 随机游走 推荐系统论文阅读
  2. word编写页码,取消封面编码
  3. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
  4. 一个bug改了3个礼拜
  5. 【论文学习】Multi-modal Knowledge Graphs for Recommender Systems
  6. 美团机器学习InAction系列—实例详解机器学习如何解决问题
  7. 深度学习之数据标准化方法综述
  8. 苹果发布新召回计划,这款iPhone两年内免费维修
  9. 停车场web项目(内含有数据库)
  10. OSPF——LSA讲解