Right Triangles
分類:
combinatorics
1.題意概述
- 給你一個
n×m 的字符串矩陣(由.
和*
組成),問你有多少個與矩陣邊平行的直角三角形?
2.解題思路
- 對於
|_
和_|
形的三角形,我們只需要在底邊_
上方看有多少個*
即可,所以公式就是(x[i]−1)×(y[i]−1) ,對每一次累加求和即爲答案。
3.AC代碼
char g[N][N];
int a[N], b[N];
int main() {
int n, m;
scanf("%d%d", &n, &m);
rep(i, 0, n) scanf("%s", g[i]);
rep(i, 0, n) {
rep(j, 0, m) {
if (g[i][j] == '*') {
a[i]++;
b[j]++;
}
}
}
ll ans = 0;
rep(i, 0, n) {
rep(j, 0, m) {
if (g[i][j] == '*')
ans += (a[i] - 1) * (b[j] - 1);
}
}
printf("%I64d\n", ans);
return 0;
}