B. Mike and Fun---cf548B(暴力求解)
2015-11-30 21:29
501 查看
题目链接:http://codeforces.com/problemset/problem/548/B
有一个n*m的矩阵,里面只有0和1,现在有Q个改变,每次都把(x,y)这点变为相反的点(0变1,1变0),每次改变后求所有行中最多有多少个连续的1;
View Code
有一个n*m的矩阵,里面只有0和1,现在有Q个改变,每次都把(x,y)这点变为相反的点(0变1,1变0),每次改变后求所有行中最多有多少个连续的1;
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<algorithm> #define N 505 #define INF 1e16 #define met(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long LL; int G , dp , n, m, q, Max ; ///Max[i]代表第i行的最大连续个数; int main() { while(scanf("%d %d %d", &n, &m, &q)!=EOF) { met(dp, 0); met(G, 0); met(Max, 0); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d", &G[i][j]); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(G[i][j]) { dp[i][j] = dp[i][j-1] + 1; Max[i] = max(Max[i], dp[i][j]); } Max[i] = max(Max[i], dp[i][j]); } } for(int i=1; i<=q; i++) { int ans = 0; int x, y; scanf("%d %d", &x, &y); G[x][y] ^= 1;///学长说我的代码太丑-_- Max[x] = 0; for(int j=1; j<=m; j++) { dp[x][j] = 0;///初始化;一定要有; if(G[x][j]) dp[x][j]=dp[x][j-1]+1; Max[x] = max(Max[x], dp[x][j]); } for(int j=1; j<=n; j++) ans = max(Max[j], ans); printf("%d\n", ans); } } return 0; }
View Code
相关文章推荐
- 最新一课 老师指点用Listview适配器
- Hadoop2.6.0学习笔记(四)TextInputFormat及RecordReader解析
- 【Android】RecyclerView的OnItemClickListener点击事件处理
- 谷歌原生下拉刷新SwipeRefreshLayout
- Android代码混淆常见配置
- N皇后问题
- 使用开源C++项目WebSocketpp构建web服务器
- 二叉树镜像(C++版)
- 杭电2039
- 乱七八糟
- 有关于提高C/C++运行效率以及避免出现Bug的几种常见的实用方法
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
- Struts2——MethodFilterInterceptor--方法拦截器
- 树形dp专题训练
- [leetcode] 191. Number of 1 Bits
- 【VMCloud云平台】私有云门户第一朵Web云(四)
- 应试教育的死穴,恰在于堵死了孩子“犯错”的空间
- javamail发送邮件
- 笔记
- [转载]Masonry介绍与使用实践(快速上手Autolayout)