题目链接: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;
}