列表

详情


NC229265. Birthday Cake

描述

牛牛的家人将要给牛牛开生日派对。他们喜欢牛牛,所以他们打算让他的生日蛋糕变得奇怪!

蛋糕是一个 的正方形,由边长为的相等正方形组成。每个正方形要么是空的,要么由一个巧克力组成。他们买了蛋糕,开始随意地把巧克力放在蛋糕上。牛牛的幸福值将等于蛋糕的同一行或同一列中带有巧克力的单元格对数。牛牛的家人想知道牛牛的幸福值是多少?

请注意,任何对的计数不能超过一次,因为两个不同的单元格不能共享同一行和同一列。

输入描述

在输入的第一行,你得到一个整数,表示蛋糕边的长度。

然后跟随 行,每行包含 个字符。空单元格用“.”表示,而包含巧克力的单元格用“C”表示。

输出描述

输出一个整数表示牛牛的幸福值。

示例1

输入:

3
.CC
C..
C.C

输出:

4

说明:

如果我们从上到下对行进行编号,从左到右对列进行编号,那么在第一个样本中共享同一行的部分是:
(1, 2) 和 (1, 3) 
(3, 1) 和 (3, 3) 
共享同一列的部分是: 
(2, 1) 和 (3, 1)
(1, 3) 和 (3, 3)

示例2

输入:

4
CC..
C..C
.CC.
.CC.

输出:

9

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 484K, 提交时间: 2023-05-21 00:06:42

#include <cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int n,s,h[101],l[101];
int main(){
    scanf("%d",&n);
    char a[n];
    int s=0;
    int i;
    for( i=0;i<n;i++){
        scanf("%s",a);
    for(int j=0;j<n;j++){
        if(a[j]=='C')
        {
		
            h[i]+=1;
            l[j]+=1;
        s=s+h[i]-1+l[j]-1;
    }
    }
    }
    printf("%d",s);
}

C++ 解法, 执行用时: 3ms, 内存消耗: 496K, 提交时间: 2022-02-09 10:00:29

#include<bits/stdc++.h>
using namespace std;
int n, x, ans, a[105];
char s[105];
int main(){
	scanf("%d", &n);
	for(int i=1; i<=n; i++, x=0){
		scanf("%s", s+1);
		for(int j=1; j<=n; j++){
			if(s[j]=='C') x++, a[j]++;
		}
		ans+=x*(x-1)/2;
	}
	for(int i=1; i<=n; i++) ans+=a[i]*(a[i]-1)/2;
	printf("%d", ans);
	return 0;
}

Python3 解法, 执行用时: 45ms, 内存消耗: 4588K, 提交时间: 2023-05-20 17:11:47

dp = []
n=int(input())
for i in range(n):
    dp.append(input())
ans = 0
for i in range(n):
    p = dp[i].count('C')
    ans += p * (p - 1)
    p = [dp[j][i]for j in range(n)].count('C')
    ans += p * (p - 1)
print(ans >> 1)

上一题