CodeForces - 844B Rectangles
生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 844B Rectangles
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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:
All cells in a set have the same color.
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.
Outpu
Output single integer ?— the number of non-empty sets from the problem description.
Example
Input
1 1
0
Output
1
Input
2 3
1 0 1
0 1 0
Output
8
Note
All cells in a set have the same color.
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.
Outpu
Output single integer ?— the number of non-empty sets from the problem description.
Example
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的棋盤,上面有0、1兩種棋子。同種且同行(或同列)的棋子可以形成一個集合,一個棋子也可以看做一個集合。問你最多可以有多少種集合。
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>using namespace std;typedef long long LL;int main(){int m,n;cin>>n>>m;int a[51][51];for(int i=0;i<n;++i)for(int j=0;j<m;++j){scanf("%d",&a[i][j]);}int one,zero;long long sum=0;for(int i=0;i<n;++i){one=zero=0;for(int j=0;j<m;++j)if(a[i][j])one++;elsezero++;sum+=(1LL<<one)-1;sum+=(1LL<<zero)-1;}for(int i=0;i<m;++i){one=zero=0;for(int j=0;j<n;++j)if(a[j][i])one++;elsezero++;sum+=(1LL<<one)-1;sum+=(1LL<<zero)-1;}cout<<sum-n*m<<endl;return 0;}考慮到n和m都比較小,分別枚舉每一行的0、1棋子,對于每個棋子有選和不選兩種可能。比如說某一行有k個1棋子,那么這一行可以形成的集合的數目就是2k?1,減一是因為要減去一個棋子都不選的這種不合法狀態。枚舉完行之后列同理。
??枚舉完行和列之后會發現每個集合只有一個一個棋子的情況都被枚舉了兩遍,所以最終答案再減去n×m即可。
總結
以上是生活随笔為你收集整理的CodeForces - 844B Rectangles的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 1190 生日蛋糕 难|供自己瞻
- 下一篇: CodeForces 845C Two