A - Portal(cf) 前缀和 区间维护
原题链接: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) 前缀和 区间维护相关推荐
- ARC下带CF前缀的类型与OC类型转换
在对钥匙串操作时这个函数 OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_R ...
- Splay伸展树入门(单点操作,区间维护)附例题模板
Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是 ...
- cf服务器维护时能否更新游戏,CF新版本今日更新维护公告
为了进一步稳定服务质量,提高游戏品质,<穿越火线>将于1月28日(星期三)8:00-11:00和1月29日(周四)8:00-11:00进行服务器停机维护,版本升级至3.0.7. 如果在维护 ...
- cf手游服务器维护19年9月19,神雕侠侣2手游9月19日停服维护公告_神雕侠侣2手游9月19日更新了什么_玩游戏网...
在神雕侠侣2手游中9月19日更新了哪些内容呢?又到了例行维护的时间了,本次更新将会优化调整一些内容哦!那么想了解的小伙伴们接下来就让我们一起来看一下吧! 亲爱的各位少侠: 为了给您带来更好的游戏体验, ...
- cf手游服务器维护19年9月19,CF9月新灵狐的约定计划活动_2019CF9月新灵狐的约定计划活动网址_快吧游戏...
穿越火线2019年9月新灵狐的约定活动马上就要开始了!只要每天加入任意模式1局,即可点亮1颗星,完成点亮5颗星,即可获得会员资格!下面就让小编带你们看看穿越火线2019年9月新灵狐的约定活动的详细介绍 ...
- cf手游服务器维护5周年版本,CF手游5周年
CF手游5周年热血刺激的设计大作战开启,全新盛大的五周年活动上演给你好看,体验端游一样的射击快感,选择你喜欢的地图场景,与诸多的高手来一张最震撼的对决,越来越多的角色加入,激烈刺激的生化对决挑战,还有 ...
- cf手游服务器维护什么时候结束,cfhd正在维护什么意思
cfhd游戏中许多玩家获得了先锋测试资格,却在登录游戏的时候发现游戏大区正在维护,许多玩家不知道该如何进行解决,接下来小编就给大家分享一下. cfhd正在维护什么意思 玩家在登录CFHD高清竞技大区的 ...
- iOS开发——CF前缀
Core Foundation (also called CF) 是在MAC iOS里的C程序的接口,也是混合的低端常规和修饰函数集合. Apple 发布他作为叫CF-Lite的开源 ...
- P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)
P4062 [Code+#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法,非常好写.skylee大佬题解 首先对于任何一个区间来说,由于两个端点不确定性非常难以一次 ...
最新文章
- 用matlab怎么画视电阻率拟断面图,在MATLAB平台上实现可控源音频大地电磁反演数据三维可视化显示...
- 动画库NineOldAndroids
- 如何动态添加菜单/菜单项、子菜单、右键菜单
- 【控制】多智能体系统总结。1. 系统模型。2.控制目标。3.模型转换。
- 半导体对物联网之水与鱼的关系
- mysql 引擎是表级别_Mysql表引擎优化
- mysql主从复制超简单,mysql简单主从复制
- python3 threading.lock_Python3 threading
- 2015年4月1号 的日志
- Pytorch nn.Fold()的简单理解与用法
- 中国医科大学计算机应用基础本科在线作业,中国医科大学《计算机应用基础(本科)》在线作业.docx...
- iPad上浏览超大图像,kakadu和Jpeg2000在iOS上的例程
- 数组和指针:超过一半的数字;水王发帖
- python实现视频转文字
- C#控制语音卡实现呼叫、录音以及来电弹屏
- i7 1165g7和i7 10510u哪个好
- html 中的版权符号 : 圆圈C
- 基于深度学习的Image Inpainting (图像修复)论文整理与概述
- android软件多版本共存,1. android studio 多版本共存(2.2 and 3.3)
- 用计算机打女生节快乐,二十好几还没女朋友?女神节的打开方式出了问题