原题链接:Problem - 1580A - Codeforces

题意:给定一个字符数组,每个字符是0或者1。问能不能找到一个子数组n >= 5 && m >= 4,要使数组四周除了四个顶角其他都要变成1,中间的地方全要变成0,问最小改变次数。

分析一下,可以用for循环枚举上下边界,每次固定上下边界就开始看左右边界。

1.首先有个前缀和,s[i][j] = s[i - 1][j],每一列的前缀和,可以很好算中间部分的1的个数(需要转变为0的次数);

2.设此时固定了上下边界:先把每一列都当做中间部分,需要转换的次数加起来,相当于sum就是从1到j列的sum[j];遍历列的时候,cnt来计算这一列如果为右边界,要转换多少次。会发现,如果以j为右边界,i为左边界,答案其实是sum[j - 1] + cntj - sum[i] + cnti , 所以要cnti - sum[i]越小越好,所以要在遍历列的时候维护cnti - sum[i]的最小值,记在pre[]数组里;

3.这种题多思考,一般要取一个矩形的情况就可以先枚举上下边界,找到计算公式,维护该维护的列的区间。

4.还有一个要主要的地方,这个题直接把0/1存在int数组里好像不行,好像非得以char类型输入,然后变成int型才可以。

#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
typedef pair<int, int> PII;
#define rep(i, m, n) for (int i = (m); i <= (n); ++i)
#define rrep(i, m, n) for (int i = (m); i >= (n); --i)
typedef long long ll;const int N = 410;
int s[N][N], a[N][N];
int pre[N];
int n, m, p1, p0, cnt;void solve() {cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {char c;cin >> c;a[i][j] = c - '0';s[i][j] = s[i - 1][j] + a[i][j];}int ans = INF;for (int i = 1; i <= n; i++)for (int j = i + 4; j <= n; j++) {int sum = 0;pre[0] = INF;for (int k = 1; k <= m; k++) {p1 = s[j - 1][k] - s[i][k];p0 = 2 - a[i][k] - a[j][k];cnt = j - i - 1 - p1;if (k > 3) ans = min(ans, pre[k - 3] + sum + cnt);sum += p1 + p0;pre[k] = min(pre[k - 1], cnt - sum);}}cout << ans << endl;
}int main() {int t;for (scanf("%d", &t); t--; solve());return 0;
}

A - Portal(cf) 前缀和 区间维护相关推荐

  1. ARC下带CF前缀的类型与OC类型转换

    在对钥匙串操作时这个函数 OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_R ...

  2. Splay伸展树入门(单点操作,区间维护)附例题模板

    Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是 ...

  3. cf服务器维护时能否更新游戏,CF新版本今日更新维护公告

    为了进一步稳定服务质量,提高游戏品质,<穿越火线>将于1月28日(星期三)8:00-11:00和1月29日(周四)8:00-11:00进行服务器停机维护,版本升级至3.0.7. 如果在维护 ...

  4. cf手游服务器维护19年9月19,神雕侠侣2手游9月19日停服维护公告_神雕侠侣2手游9月19日更新了什么_玩游戏网...

    在神雕侠侣2手游中9月19日更新了哪些内容呢?又到了例行维护的时间了,本次更新将会优化调整一些内容哦!那么想了解的小伙伴们接下来就让我们一起来看一下吧! 亲爱的各位少侠: 为了给您带来更好的游戏体验, ...

  5. cf手游服务器维护19年9月19,CF9月新灵狐的约定计划活动_2019CF9月新灵狐的约定计划活动网址_快吧游戏...

    穿越火线2019年9月新灵狐的约定活动马上就要开始了!只要每天加入任意模式1局,即可点亮1颗星,完成点亮5颗星,即可获得会员资格!下面就让小编带你们看看穿越火线2019年9月新灵狐的约定活动的详细介绍 ...

  6. cf手游服务器维护5周年版本,CF手游5周年

    CF手游5周年热血刺激的设计大作战开启,全新盛大的五周年活动上演给你好看,体验端游一样的射击快感,选择你喜欢的地图场景,与诸多的高手来一张最震撼的对决,越来越多的角色加入,激烈刺激的生化对决挑战,还有 ...

  7. cf手游服务器维护什么时候结束,cfhd正在维护什么意思

    cfhd游戏中许多玩家获得了先锋测试资格,却在登录游戏的时候发现游戏大区正在维护,许多玩家不知道该如何进行解决,接下来小编就给大家分享一下. cfhd正在维护什么意思 玩家在登录CFHD高清竞技大区的 ...

  8. iOS开发——CF前缀

             Core Foundation (also called CF) 是在MAC iOS里的C程序的接口,也是混合的低端常规和修饰函数集合. Apple 发布他作为叫CF-Lite的开源 ...

  9. P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)

    P4062 [Code+#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法,非常好写.skylee大佬题解 首先对于任何一个区间来说,由于两个端点不确定性非常难以一次 ...

最新文章

  1. 用matlab怎么画视电阻率拟断面图,在MATLAB平台上实现可控源音频大地电磁反演数据三维可视化显示...
  2. 动画库NineOldAndroids
  3. 如何动态添加菜单/菜单项、子菜单、右键菜单
  4. 【控制】多智能体系统总结。1. 系统模型。2.控制目标。3.模型转换。
  5. 半导体对物联网之水与鱼的关系
  6. mysql 引擎是表级别_Mysql表引擎优化
  7. mysql主从复制超简单,mysql简单主从复制
  8. python3 threading.lock_Python3 threading
  9. 2015年4月1号 的日志
  10. Pytorch nn.Fold()的简单理解与用法
  11. 中国医科大学计算机应用基础本科在线作业,中国医科大学《计算机应用基础(本科)》在线作业.docx...
  12. iPad上浏览超大图像,kakadu和Jpeg2000在iOS上的例程
  13. 数组和指针:超过一半的数字;水王发帖
  14. python实现视频转文字
  15. C#控制语音卡实现呼叫、录音以及来电弹屏
  16. i7 1165g7和i7 10510u哪个好
  17. html 中的版权符号 : 圆圈C
  18. 基于深度学习的Image Inpainting (图像修复)论文整理与概述
  19. android软件多版本共存,1. android studio 多版本共存(2.2 and 3.3)
  20. 用计算机打女生节快乐,二十好几还没女朋友?女神节的打开方式出了问题

热门文章

  1. [ZUCC 英语周测]Quiz B-3-7
  2. CPU处理器检测工具
  3. DAZ3D导入模型设置材质
  4. 梦回JDBC —— (Statement对象)
  5. css 隐藏滚动条 竖向y滚动,横向x不滚动
  6. 决策树--信息增益,信息增益比,Geni指数
  7. Discuz二次元风格The_C_Style模板源码下载
  8. Linux下修改虚拟机的root密码
  9. 08.attempt 方法
  10. 基于北斗导航定位系统的设计与实现(论文+程序设计源码+数据库文件)