2017-08-25 15:32:14

writer:pprp

题目:

B. Rectangles
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given n × m table. Each cell of the table is colored white or black. Find the number of non-empty sets of cells such that:

  1. All cells in a set have the same color.
  2. Every two cells in a set share row or column.
Input

The first line of input contains integers n and m (1 ≤ n, m ≤ 50) — the number of rows and the number of columns correspondingly.

The next n lines of input contain descriptions of rows. There are m integers, separated by spaces, in each line. The number equals 0 if the corresponding cell is colored white and equals 1 if the corresponding cell is colored black.

Output

Output single integer  — the number of non-empty sets from the problem description.

Examples
input
1 1
0
output
1
input
2 3
1 0 1
0 1 0
output
8
Note

In the second example, there are six one-element sets. Additionally, there are two two-element sets, the first one consists of the first and the third cells of the first row, the second one consists of the first and the third cells of the second row. To sum up, there are 8 sets.

题意说明:

给你 n * m 的矩阵

让你找到有多少符合要求的集合

比如给你一行, 1001011 你可以选择 一个1两个1三个1四个一, 选择0的情况同理,

所以可以看出来用到了组合数的 C(4,1) + C(4,2) + C(4,3) + C(4,4),

而有如下公式

C(4,0) + C(4,1) + C(4,2) + C(4,3) + C(4,4) =  2 ^ 4

所以公式转化为 2 ^ n - 1(用来计算组合数个个数)

下面的pow函数就是这个功能

之后要横向纵向分别分析,但是这个时候别忘记会重叠,所以减去 n * m

代码如下:

/*
theme: AIM tech Round 4 div 2 B rectangles
writer:pprp
declare:reference from zindow
date:2017/8/25
*/ #include<bits/stdc++.h> using namespace std;
const int maxn = ;
typedef long long ll; //用来计算组合数的
ll pow(int x)
{
ll res = ;
while(x--) res <<= ;
return res-;
} int main()
{
int whi = , bla = ;
int n, m;
ll ans = ;
cin >> n >> m;
int a[maxn][maxn]; for(int i = ; i < n ; i++)
for(int j = ; j < m ; j++)
cin >> a[i][j]; for(int i = ; i < n ; i++)
{
whi = bla = ;
for(int j = ; j < m ; j++)
{
if(a[i][j] == )whi++;
else bla++;
}
ans += pow(whi) + pow(bla);
} // cout << "test" << endl;
// cout << ans << endl; for(int j = ; j < m ; j++)
{
whi = bla = ;
for(int i = ; i < n ; i++)
{
if(a[i][j] == )whi++;
else bla++;
}
// cout << "case :" << j << "whi" << whi << "bla" << bla << endl;
ans += pow(whi) + pow(bla);
} // cout << "test" << endl;
// cout << ans << endl; cout << ans - m*n << endl; return ;
}

横向纵向遍历的时候总是出错,

这样记: 初始化的时候 for(i : 1...n)

            for(j : 1...m)

一般的这种形式是横向遍历,如果要改成纵向遍历,那么就要内外循环翻转过来

i对应n

j对应m

这样就不容易错了

另外补充二维数组的知识点,分析的时候就不容易有问题了

C语言中是按照行优先储存的

codeforce AIM tech Round 4 div 2 B rectangles的更多相关文章

  1. AIM Tech Round 3 (Div. 2)

    #include <iostream> using namespace std; ]; int main() { int n, b, d; cin >> n >> ...

  2. AIM Tech Round 3 (Div. 2) A B C D

    虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场 ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被h ...

  3. AIM Tech Round 3 (Div. 2) B

    Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...

  4. AIM Tech Round 3 (Div. 2) A

    Description Kolya is going to make fresh orange juice. He has n oranges of sizes a1, a2, ..., an. Ko ...

  5. AIM Tech Round 3 (Div. 2) (B C D E) (codeforces 709B 709C 709D 709E)

    rating又掉下去了.好不容易蓝了.... A..没读懂题,wa了好几次,明天问队友补上... B. Checkpoints 题意:一条直线上n个点x1,x2...xn,现在在位置a,求要经过任意n ...

  6. AIM Tech Round 3 (Div. 2) B 数学+贪心

    http://codeforces.com/contest/709 题目大意:给一个一维的坐标轴,上面有n个点,我们刚开始在位置a,问,从a点开始走,走n-1个点所需要的最小路程. 思路:我们知道,如 ...

  7. AIM Tech Round 3 (Div. 2)D. Recover the String(贪心+字符串)

    D. Recover the String time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. AIM Tech Round 4 (Div. 2)ABCD

    A. Diversity time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  9. AIM Tech Round 4 (Div. 2)(A,暴力,B,组合数,C,STL+排序)

    A. Diversity time limit per test:1 second memory limit per test:256 megabytes input:standard input o ...

随机推荐

  1. Docker与virtualenv

    docker环境统一,组件隔离 关于Docker与virtualenv,其本质是一样的,virtualenv虚拟python运行环境,保证系统python环境的整洁,docker也是一样,只是它虚拟的 ...

  2. d3.js 之关联数据:data操作符

    数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...

  3. POJ1470Closest Common Ancestors 最近公共祖先LCA 的 离线算法 Tarjan

    该算法的详细解释请戳: http://www.cnblogs.com/Findxiaoxun/p/3428516.html #include<cstdio> #include<alg ...

  4. Power Strings----poj2406(kmp扩展 循环节)

    题目链接:http://poj.org/problem?id=2406 题意:就是求串s能够最多由多少个相同的串a串联而成: 例如 ababab 由3个ab串联而成: abababa 只能由1个aba ...

  5. Spring框架第三篇之基于XML的DI注入

    一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...

  6. iOS App 上架(Analysis 工具使用)

    随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App ...

  7. A simple windows programm in c

    A simple windows programm in c        The following programm is a minimal windows program. It opens ...

  8. android 写入联系人

    public void testInsert() { ContentValues values = new ContentValues(); /* * 首先向RawContacts.CONTENT_U ...

  9. 实参相依查找[条款25]----《C++必知必会》

    名字空间对现代C++编程和设计有着深远的影响.其中有些影响直接而明显,例如using声明和using 指令以及采用名字空间作用域加以限定的名字.然而,名字空间还有一些在语法上不那么明显但任然很有基础. ...

  10. ionic 配置打包环境

    配置java环境就不说了,太简单 下载AndroidSdkAndroid SDK Tools翻过墙的朋友可以去Google Android的官网上下载:http://developer.android ...