CodeForces 425B Sereja and Table

2024-09-05 03:38
文章标签 codeforces table sereja 425b

本文主要是介绍CodeForces 425B Sereja and Table,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:

一个充满0和1的矩形  最多将k个数字翻转  问  最少翻转几个数字可以使所有0或1的连通块都是矩形  如果不可能输出-1


思路:

首先  如果确定了一行  那么整个矩形就确定了

因为在最后的状态中  每一行要么与确定的行完全一致  要么完全相反  这才能保证连通块都是矩形

然后  本题k很小  因此可以分类讨论

如果 max(n,m)<=k 那么可以暴力枚举第一行状态  进而计算翻转次数  最多只有2^10种情况

否则 max(n,m)>k  那么至少有一行或者一列是没有被修改的  那么可以枚举哪一行没被修改  再计算翻转次数


代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 110int a[N][N];
int n,m,t,tmp,ans,sum;int main()
{int i,j,k;scanf("%d%d%d",&n,&m,&t);for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&a[i][j]);if(n<m){for(i=1;i<=m;i++){for(j=i+1;j<=m;j++) swap(a[i][j],a[j][i]);}swap(n,m);}/*for(i=1;i<=n;i++){for(j=1;j<=m;j++) printf("%d ",a[i][j]);puts("");}*/ans=t+1;if(n<=t){for(i=0;i<(1<<m);i++){sum=0;for(k=1;k<=n;k++){tmp=0;for(j=0;j<m;j++){if(i&(1<<j)){if(!a[k][j+1]) tmp++;}else{if(a[k][j+1]) tmp++;}}sum+=min(tmp,m-tmp);}ans=min(ans,sum);}}else{for(i=1;i<=n;i++){sum=0;for(k=1;k<=n;k++){tmp=0;for(j=1;j<=m;j++){if(a[k][j]!=a[i][j]) tmp++;}sum+=min(tmp,m-tmp);}ans=min(ans,sum);}}if(ans>t) printf("-1\n");else printf("%d\n",ans);return 0;
}


这篇关于CodeForces 425B Sereja and Table的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137850

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

Codeforces Round 971 (Div. 4) (A~G1)

A、B题太简单,不做解释 C 对于 x y 两个方向,每一个方向至少需要 x / k 向上取整的步数,取最大值。 由于 x 方向先移动,假如 x 方向需要的步数多于 y 方向的步数,那么最后 y 方向的那一步就不需要了,答案减 1 代码 #include <iostream>#include <algorithm>#include <vector>#include <string>

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

css-table

设置table的文字不换行:给th,td添加white-space: nowrap; 设置单元格内容及其边框的距离:使用html的cellpadding属性,还有一种方式设置padding。在CSS中,table, th, td{padding:0;}效果等同于cellpadding="0″。 设置table的单元格边距:border-spacing如果定义一个 length 参数,那么定义的是水