BUAA 421 10Mat01(数学杂题)

题目链接:http://acm.buaa.edu.cn/problem/421/

题意:给出一个n*n的01矩阵。求四个角都一样的矩形有多少个?

思路:枚举两列,统计这两列中对应位置均为0或1的个数,设为x0和x1,则这两列中的合法矩形为C(x0,2)+C(x1,2)。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
#include <string>

#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define abs(x) ((x)>=0?(x):-(x))
#define i64 long long
#define u32 unsigned int
#define u64 unsigned long long
#define clr(x,y) memset(x,y,sizeof(x))
#define pb(x) push_back(x)
#define SZ(x) x.size()
#define PI acos(-1.0)
#define sqr(x) ((x)*(x))
using namespace std;

const int MAX=105;
char s[MAX][MAX];
int n,C;

int main()
{
    for(scanf("%d",&C);C--;)
    {
        scanf("%d",&n);
        int i,j,k,t;
        for(i=1;i<=n;i++) scanf("%s",s[i]+1);
        int ans=0,c[2];
        for(i=1;i<=n;i++) for(j=i+1;j<=n;j++)
        {
            c[0]=c[1]=0;
            for(k=1;k<=n;k++) if(s[k][i]==s[k][j])
            {
                c[s[k][i]-'0']++;
            }
            ans+=(c[0]-1)*c[0]/2+(c[1]-1)*c[1]/2;
        }
        printf("%d\n",ans);
    }
    return 0;
}

  

你可能感兴趣的:(mat)