Codeforces 52B Right Triangles

来源:互联网 发布:单片机和pc通信 编辑:程序博客网 时间:2024/05/16 14:44

Right Triangles             CodeForces 52B

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

You are given a n × m field consisting only of periods ('.') and asterisks ('*'). Your task is to count all right triangles with two 

sides parallel to the square sides, whose vertices are in the centers of '*'-cells. A right triangle is a triangle in which one angle 

is a right angle (that is, a 90 degree angle).

Input

The first line contains two positive integer numbers n and m (1 ≤ n, m ≤ 1000). The following n lines consist of m characters

 each, describing the field. Only '.' and '*' are allowed.

Output

Output a single number — total number of square triangles in the field. Please, do not use %lld specificator to read or write 

64-bit integers in C++. It is preffered to use cout (also you may use %I64d).

Sample Input

Input
2 2***.
Output
1
Input
3 4*..*.**.*.**
Output
9


输入时记录每列每行顶点数,然后两个for循环,一列一列数,其中的减一是指减去自己

#include<stdio.h>#include<string.h>char s[1004][1004];int r[1004],c[1004];int main(){    int n,m,i,j;    __int64 ans,tem;    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(r,0,sizeof(r));        memset(c,0,sizeof(c));        for(i=0; i<n; i++)        {            scanf("%s",s[i]);            for(j=0; j<m; j++)                if(s[i][j]=='*')                {                    r[i]++;                    c[j]++;                }        }        ans=0;        for(j=0; j<m; j++)        {            tem=0;            for(i=0; i<n; i++)                if(s[i][j]=='*')                    tem+=r[i]-1;            ans+=tem*(c[j]-1);        }        printf("%I64d\n",ans);    }    return 0;}


0 0